-
Notifications
You must be signed in to change notification settings - Fork 109
DirectDraw to Direct3D9 Conversion Status
Elisha Riedlinger edited this page Jul 2, 2025
·
28 revisions
For this page I will be talking about the status of the work to convert DirectX 1-7 to DirectX 9. This is a more technical discussion. For game compatibility check out this page here: Dd7to9 Compatibility
| Note | --Status-- |
|---|---|
| The function is fully implemented. |
Full |
| The function is partially implemented. It may work in some circumstances but not all. |
Partial |
| The function is either not implemented at all or not enough to work correctly. |
None |
| Function | Notes | -Support- |
|---|---|---|
| Compact() | Not implemented in DirectDraw. |
Full |
| CreateClipper() |
Full |
|
| CreatePalette() | Using Direct3D9 pixel shader for handling the palette colors. Does not support DDPCAPS_PRIMARYSURFACELEFT flag. |
Partial |
| CreateSurface() | Does not support: CubeMaps, zPixels, BumpDUDV, BumpLuminance, Linear |
Partial |
| DuplicateSurface() |
Full |
|
| EnumDisplayModes() |
Full |
|
| EnumSurfaces() | Does not support: DDENUMSURFACES_DOESEXIST, DDENUMSURFACES_MATCH, DDENUMSURFACES_CANBECREATED |
Partial |
| FlipToGDISurface() | Does not properly flip to GDI surface. |
Partial |
| GetCaps() |
Full |
|
| GetDisplayMode() |
Full |
|
| GetFourCCCodes() |
Full |
|
| GetGDISurface() | Does not properly get the GDI surface. |
Partial |
| GetMonitorFrequency() |
Full |
|
| GetScanLine() |
Full |
|
| GetVerticalBlankStatus() |
Full |
|
| Initialize() |
Full |
|
| RestoreDisplayMode() |
Full |
|
| SetCooperativeLevel() |
Full |
|
| SetDisplayMode() |
Full |
|
| WaitForVerticalBlank() | Loops until vertical blink. |
Full |
| GetAvailableVidMem() | Does not correctly get the available video memory. |
Partial |
| GetSurfaceFromDC() | Not implemented. |
None |
| RestoreAllSurfaces() |
Full |
|
| TestCooperativeLevel() |
Full |
|
| GetDeviceIdentifier() |
Full |
|
| StartModeTest() | Not implemented. |
None |
| EvaluateMode() | Not implemented. |
None |
| Function | Notes | -Support- |
|---|---|---|
| AddAttachedSurface() | This function is emulated. Does not support adding MipMaps through this function. |
Partial |
| AddOverlayDirtyRect() |
None |
|
| Blt() | Partially emulated. Does not support non-Windows raster operations and alpha flags. |
Partial |
| BltBatch() | Same as Blt() |
Partial |
| BltFast() |
Full |
|
| DeleteAttachedSurface() |
Full |
|
| EnumAttachedSurfaces() |
Full |
|
| EnumOverlayZOrders() |
None |
|
| Flip() | This function is emulated. Doesn't support DDFLIP_EVEN, DDFLIP_ODD and interval flipping. |
Partial |
| GetAttachedSurface() | This function is emulated. |
Full |
| GetBltStatus() |
Full |
|
| GetCaps() |
Full |
|
| GetClipper() |
Full |
|
| GetColorKey() |
Full |
|
| GetDC() |
Full |
|
| GetFlipStatus() |
Full |
|
| GetOverlayPosition() |
Full |
|
| GetPalette() |
Full |
|
| GetPixelFormat() |
Full |
|
| GetSurfaceDesc() |
Full |
|
| Initialize() |
Full |
|
| IsLost() |
Full |
|
| Lock() | May have issues with concurrent locks to the same surface |
Partial |
| ReleaseDC() |
Full |
|
| Restore() |
Full |
|
| SetClipper() |
Full |
|
| SetColorKey() |
Full |
|
| SetOverlayPosition() | Just stores the position value |
Partial |
| SetPalette() |
Full |
|
| Unlock() |
Full |
|
| UpdateOverlay() | Uses Blt to emulate this. Does not support DDOVER_AUTOFLIP, alpha flags, BOB, interleaving, scale factors, dirty rect or refreashing overlay |
Partial |
| UpdateOverlayDisplay() |
None |
|
| UpdateOverlayZOrder() |
None |
|
| GetDDInterface() |
Full |
|
| PageLock() |
Full |
|
| PageUnlock() |
Full |
|
| SetSurfaceDesc() | Doesn't support updating all surface flags. |
Partial |
| SetPrivateData() | Private Data may be deleted prematurely in some cases. |
Partial |
| GetPrivateData() | Private Data may be deleted prematurely in some cases. |
Partial |
| FreePrivateData() |
Full |
|
| GetUniquenessValue() |
Full |
|
| ChangeUniquenessValue() |
Full |
|
| SetPriority() | Priority can be set, but is not used. |
Partial |
| GetPriority() |
Full |
|
| SetLOD() | LOD can be set, but is not used. |
Partial |
| GetLOD() | Not always getting the correct LOD |
Partial |
| Function | Notes | -Support- |
|---|---|---|
| GetClipList() |
Full |
|
| GetHWnd() |
Full |
|
| Initialize() |
Full |
|
| IsClipListChanged() | Emulated and does not always report the true state of the cliplist. |
Partial |
| SetClipList() |
Full |
|
| SetHWnd() |
Full |
| Function | Notes | -Support- |
|---|---|---|
| GetCaps() |
Full |
|
| GetEntries() |
Full |
|
| Initialize() |
Full |
|
| SetEntries() | Does not support DDPCAPS_PRIMARYSURFACELEFT or DDPCAPS_ALPHA |
Partial |
| Function | Notes | -Support- |
|---|---|---|
| GetColorControls() |
Full |
|
| SetColorControls() | Color can be set, but is not used. |
Partial |
| Function | Notes | -Support- |
|---|---|---|
| GetGammaRamp() |
Full |
|
| SetGammaRamp() | Using a shader for gamma support. |
Full |
| Function | Notes | -Support- |
|---|---|---|
| Initialize() |
Full |
|
| EnumDevices() |
Full |
|
| CreateLight() |
Full |
|
| CreateMaterial() |
Full |
|
| CreateViewport() |
Full |
|
| FindDevice() |
Full |
|
| CreateDevice() | Does not properly handle the CLSID sent in to this function. |
Partial |
| CreateVertexBuffer() |
Full |
|
| EnumZBufferFormats() |
Full |
|
| EvictManagedTextures() | Just returns OK, as texture eviction happens automatically in Direct3D9. |
Full |
| Function | Notes | -Support- |
|---|---|---|
| Initialize() |
Full |
|
| GetCaps() |
Full |
|
| SwapTextureHandles() | This function is emulated. |
Full |
| CreateExecuteBuffer() |
Full |
|
| GetStats() |
None |
|
| Execute() | Does not support D3DOP_PROCESSVERTICES and D3DOP_SPAN. Partial support for D3DOP_SETSTATUS and D3DOP_BRANCHFORWARD |
Partial |
| AddViewport() |
Full |
|
| DeleteViewport() |
Full |
|
| NextViewport() |
Full |
|
| Pick() |
None |
|
| GetPickRecords() |
None |
|
| EnumTextureFormats() |
Full |
|
| CreateMatrix() |
Full |
|
| SetMatrix() |
Full |
|
| GetMatrix() |
Full |
|
| DeleteMatrix() |
Full |
|
| BeginScene() |
Full |
|
| EndScene() |
Full |
|
| GetDirect3D() |
Full |
|
| SetCurrentViewport() |
Full |
|
| GetCurrentViewport() |
Full |
|
| SetRenderTarget() |
Full |
|
| GetRenderTarget() |
Full |
|
| Begin() |
None |
|
| BeginIndexed() |
None |
|
| Vertex() |
None |
|
| Index() |
None |
|
| End() |
None |
|
| GetRenderState() |
Full |
|
| SetRenderState() | Does not support D3DRENDERSTATE_FLUSHBATCH, D3DRENDERSTATE_COLORKEYBLENDENABLE, D3DRENDERSTATE_LINEPATTERN, D3DRENDERSTATE_ZVISIBLE, D3DRENDERSTATE_STIPPLE, D3DRENDERSTATE_EXTENTS, among others |
Partial |
| GetLightState() |
Full |
|
| SetLightState() |
Full |
|
| SetTransform() |
Full |
|
| GetTransform() |
Full |
|
| MultiplyTransform() |
Full |
|
| DrawPrimitive() |
Full |
|
| DrawIndexedPrimitive() |
Full |
|
| SetClipStatus() | Just stored the status, does nothing with it. Does not support D3DCLIPSTATUS_EXTENTS2 or D3DCLIPSTATUS_EXTENTS3 |
Partial |
| GetClipStatus() |
Full |
|
| DrawPrimitiveStrided() |
Full |
|
| DrawIndexedPrimitiveStrided() |
Full |
|
| DrawPrimitiveVB() |
Full |
|
| DrawIndexedPrimitiveVB() |
Full |
|
| ComputeSphereVisibility() | Just returns OK, indicating that all is visible. |
Partial |
| GetTexture() |
Full |
|
| SetTexture() |
Full |
|
| GetTextureStageState() |
Full |
|
| SetTextureStageState() | Does not support D3DTSS_SRGBTEXTURE, D3DTSS_ELEMENTINDEX, D3DTSS_DMAPOFFSET |
Partial |
| ValidateDevice() |
Full |
|
| Clear() |
Full |
|
| SetViewport() |
Full |
|
| GetViewport() |
Full |
|
| SetMaterial() |
Full |
|
| GetMaterial() |
Full |
|
| SetLight() |
Full |
|
| GetLight() |
Full |
|
| BeginStateBlock() |
Full |
|
| EndStateBlock() |
Full |
|
| PreLoad() | Just returns OK, as texture as there is no need to preload textures in Direct3D9. |
Full |
| ApplyStateBlock() |
Full |
|
| CaptureStateBlock() |
Full |
|
| DeleteStateBlock() |
Full |
|
| CreateStateBlock() |
Full |
|
| Load() |
Full |
|
| LightEnable() |
Full |
|
| GetLightEnable() |
Full |
|
| SetClipPlane() |
Full |
|
| GetClipPlane() |
Full |
|
| GetInfo() |
Full |
| Function | Notes | -Support- |
|---|---|---|
| Initialize() |
Full |
|
| GetViewport() |
Full |
|
| SetViewport() |
Full |
|
| TransformVertices() | 'D3DTRANSFORM_CLIPPED' Not Implemented |
Partial |
| LightElements() |
Full |
|
| SetBackground() |
Full |
|
| GetBackground() |
Full |
|
| SetBackgroundDepth() |
None |
|
| GetBackgroundDepth() |
None |
|
| Clear() |
Full |
|
| AddLight() |
Full |
|
| DeleteLight() |
Full |
|
| NextLight() |
Full |
|
| GetViewport2() |
Full |
|
| SetViewport2() | 'clip volume' Not Implemented |
Partial |
| SetBackgroundDepth2() |
None |
|
| GetBackgroundDepth2() |
None |
|
| Clear2() |
Full |
| Function | Notes | -Support- |
|---|---|---|
| Initialize() |
Full |
|
| GetHandle() |
Full |
|
| PaletteChanged() | Just returns OK, as there is no need to notify a texture about the palette change as it happens automatically with the current implementation. |
Full |
| Load() |
Full |
|
| Unload() | Just returns OK, as texture unloading happens automatically in Direct3D9. |
Full |
| Function | Notes | -Support- |
|---|---|---|
| Initialize() |
Full |
|
| SetMaterial() | RampSize Not Implemented |
Partial |
| GetMaterial() |
Full |
|
| GetHandle() |
Full |
|
| Reserve() |
Full |
|
| Unreserve() |
Full |
| Function | Notes | -Support- |
|---|---|---|
| Initialize() |
Full |
|
| SetLight() |
Full |
|
| GetLight() |
Full |
| Function | Notes | -Support- |
|---|---|---|
| Initialize() |
Full |
|
| Lock() |
Full |
|
| Unlock() |
Full |
|
| SetExecuteData() |
Full |
|
| GetExecuteData() |
Full |
|
| Validate() |
Full |
|
| Optimize() |
Full |
| Function | Notes | -Support- |
|---|---|---|
| Lock() |
Full |
|
| Unlock() |
Full |
|
| ProcessVertices() |
Full |
|
| GetVertexBufferDesc() |
Full |
|
| Optimize() | Just returns ok, as may not be needed for Direct3D9 |
Full |
| ProcessVerticesStrided() |
Full |
Full
Partial
None