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