Over the past few years, I've been working on a number of projects in part motivated by the need to replace legacy D3DX functionality. As noted on MSDN, all versions of D3DX are deprecated and are not shipped with the Windows 8.x SDK. This includes D3DX9, D3DX10, and D3DX11. There are plenty of options for moving existing code over to newer, more supportable solutions most of which are now shared-source.
I've built a number of porting notes tables for each of these topics, and then realized today I don't have a single place to see it all. So here it is, the "D3DX porting mega-table" for Direct3D 11.
Related:Where is the DirectX SDK?, Where is the DirectX SDK (2013 Edition)?, DirectX SDKs of a certain age
General Helpers
The DirectX Tool Kit provides a number of helpers that are designed to simplify Direct3D 11 programming in the tradition of the original D3DX library. You can find the library on CodePlex.
ID3DX10Sprite |
|
ID3DX10Font |
|
ID3DX10Mesh |
|
D3DXCreateBox |
|
D3DX11CreateShaderResourceViewFromFile |
|
D3DX11CreateShaderResourceViewFromResource |
|
D3DX11CreateTextureFromFile |
|
D3DX11CreateTextureFromResource |
|
D3DX11SaveTextureToFile |
|
HLSL Functions
The HLSL compiler, shader reflection API, and related functionality has been broken out into it's own D3DCompile DLL for some time. D3DCompile is in the Windows 8.x SDK and is included with VS 2012 and VS 2013 Preview.
D3DXCompileShaderFromFile | D3DCompileFromFile |
D3DXCompileShader | D3DCompile |
D3DXCompileShaderFromResource | No direct equivalent. Can use resource APIs and then D3DCompile above. |
D3DXPreprocessShader | D3DPreprocess |
D3DXDisassembleShader | D3DDisassemble |
D3D10ReflectShader | D3DReflect D3D11Reflect |
ID3DXBuffer | ID3DBlob |
D3DXCreateBuffer | D3DCreateBlob |
D3D10GetInputSignatureBlob | D3DGetBlobPart |
Texture Functions
The DirectXTex library is primarily intended for texture processing offline with tools, although it can also be used at runtime for doing texture block compression, mipmap generation, or handling more general image processing needs. DirectXTK is intended for use at runtime with light-weight helpers and image loaders, but does not provide support for general runtime texture format conversion. You can find both libraries on CodePlex.
D3DX11ComputeNormalMap | DirectXTex library, |
D3DX11CreateShaderResourceViewFromFile | DDSTextureLoader: DirectXTex library (tools), |
D3DX11CreateShaderResourceViewFromMemory | DDSTextureLoader: DirectXTex library (tools), |
D3DX11CreateShaderResourceViewFromResource | No direct equivalent, can use Win32 resource functions and then the ‘from memory’ APIs above. |
D3DX11FilterTexture | DirectXTex library, |
D3DX11GetImageInfoFromFile | DirectXTex library, |
D3DX11GetImageInfoFromMemory | DirectXTex library, |
D3DX11GetImageInfoFromResource | No direct equivalent, can use Win32 resource functions and then the ‘from memory’ APIs above. |
D3DX11LoadTextureFromTexture | DirectXTex library, |
D3DX11SaveTextureToFile | ScreenGrab: DirectXTex library, |
D3DX11SaveTextureToMemory | DirectXTex library, |
Math
The legacy D3DXMath library has been replaced by DirectXMath. The library is in the Windows 8.x SDK and is included with VS 2012 and VS 2013 Preview.
D3DXFLOAT16 | HALF |
D3DXMATRIXA16 | XMMATRIX or XMFLOAT4X4A |
| XMVECTOR is used rather than having unique types, so you will likely need to use an XMFLOAT4 |
D3DXVECTOR2 | XMFLOAT2 |
D3DXVECTOR2_16F | XMHALF2 |
D3DXVECTOR3 | XMFLOAT3 |
D3DXVECTOR4 | XMFLOAT4 (or if you can guarantee the data is 16-byte aligned, XMVECTOR or XMFLOAT4A ) |
D3DXVECTOR4_16F | XMHALF4 |
D3DX_PI | XM_PI |
D3DX_1BYPI | XM_1DIVPI |
D3DXToRadian | XMConvertToRadians |
D3DXToDegree | XMConvertToDegrees |
D3DXBoxBoundProbe | BoundingBox::Intersects(XMVECTOR, XMVECTOR, float&) |
D3DXComputeBoundingBox | BoundingBox::CreateFromPoints |
D3DXComputeBoundingSphere | BoundingSphere::CreateFromPoints |
D3DXSphereBoundProbe | BoundingSphere::Intersects(XMVECTOR, XMVECTOR, float&) |
D3DXIntersectTriFunction | TriangleTests::Intersects |
D3DXFloat32To16Array | XMConvertFloatToHalfStream |
D3DXFloat16To32Array | XMConvertHalfToFloatStream |
D3DXVec2Length | XMVector2Length or XMVector2LengthEst |
D3DXVec2LengthSq | XMVector2LengthSq |
D3DXVec2Dot | XMVector2Dot |
D3DXVec2CCW | XMVector2Cross |
D3DXVec2Add | XMVectorAdd |
D3DXVec2Subtract | XMVectorSubtract |
D3DXVec2Minimize | XMVectorMin |
D3DXVec2Maximize | XMVectorMax |
D3DXVec2Scale | XMVectorScale |
D3DXVec2Lerp | XMVectorLerp or XMVectorLerpV |
D3DXVec2Normalize | XMVector2Normalize or XMVector2NormalizeEst |
D3DXVec2Hermite | XMVectorHermite or XMVectorHermiteV |
D3DXVec2CatmullRom | XMVectorCatmullRom or XMVectorCatmullRomV |
D3DXVec2BaryCentric | XMVectorBaryCentric or XMVectorBaryCentricV |
D3DXVec2Transform | XMVector2Transform |
D3DXVec2TransformCoord | XMVector2TransformCoord |
D3DXVec2TransformNormal | XMVector2TransformNormal |
D3DXVec2TransformArray | XMVector2TransformStream |
D3DXVec2TransformCoordArray | XMVector2TransformCoordStream |
D3DXVec2TransformNormalArray | XMVector2TransformNormalStream |
D3DXVec3Length | XMVector3Length or XMVector3LengthEst |
D3DXVec3LengthSq | XMVector3LengthSq |
D3DXVec3Dot | XMVector3Dot |
D3DXVec3Cross | XMVector3Cross |
D3DXVec3Add | XMVectorAdd |
D3DXVec3Subtract | XMVectorSubtract |
D3DXVec3Minimize | XMVectorMin |
D3DXVec3Maximize | XMVectorMax |
D3DXVec3Scale | XMVectorScale |
D3DXVec3Lerp | XMVectorLerp or XMVectorLerpV |
D3DXVec3Normalize | XMVector3Normalize or XMVector3NormalizeEst |
D3DXVec3Hermite | XMVectorHermite or XMVectorHermiteV |
D3DXVec3CatmullRom | XMVectorCatmullRom or XMVectorCatmullRomV |
D3DXVec3BaryCentric | XMVectorBaryCentric or XMVectorBaryCentricV |
D3DXVec3Transform | XMVector3Transform |
D3DXVec3TransformCoord | XMVector3TransformCoord |
D3DXVec3TransformNormal | XMVector3TransformNormal |
D3DXVec3TransformArray | XMVector3TransformStream |
D3DXVec3TransformCoordArray | XMVector3TransformCoordStream |
D3DXVec3TransformNormalArray | XMVector3TransformNormalStream |
D3DXVec3Project | XMVector3Project |
D3DXVec3Unproject | XMVector3Unproject |
D3DXVec3ProjectArray | XMVector3ProjectStream |
D3DXVec3UnprojectArray | XMVector3UnprojectStream |
D3DXVec4Length | XMVector4Length or XMVector4LengthEst |
D3DXVec4LengthSq | XMVector4LengthSq |
D3DXVec4Dot | XMVector4Dot |
D3DXVec4Add | XMVectorAdd |
D3DXVec4Subtract | XMVectorSubtract |
D3DXVec4Minimize | XMVectorMin |
D3DXVec4Maximize | XMVectorMax |
D3DXVec4Scale | XMVectorScale |
D3DXVec4Lerp | XMVectorLerp or XMVectorLerpV |
D3DXVec4Cross | XMVector4Cross |
D3DXVec4Normalize | XMVector4Normalize or XMVector4NormalizeEst |
D3DXVec4Hermite | XMVectorHermite or XMVectorHermiteV |
D3DXVec4CatmullRom | XMVectorCatmullRom or XMVectorCatmullRomV |
D3DXVec4BaryCentric | XMVectorBaryCentric or XMVectorBaryCentricV |
D3DXVec4Transform | XMVector4Transform |
D3DXVec4TransformArray | XMVector4TransformStream |
D3DXMatrixIdentity | XMMatrixIdentity |
D3DXMatrixDeterminant | XMMatrixDeterminant |
D3DXMatrixDecompose | XMMatrixDecompose |
D3DXMatrixTranspose | XMMatrixTranspose |
D3DXMatrixMultiply | XMMatrixMultiply |
D3DXMatrixMultiplyTranspose | XMMatrixMultiplyTranspose |
D3DXMatrixInverse | XMMatrixInverse |
D3DXMatrixScaling | XMMatrixScaling |
D3DXMatrixTranslation | XMMatrixTranslation |
D3DXMatrixRotationX | XMMatrixRotationX |
D3DXMatrixRotationY | XMMatrixRotationY |
D3DXMatrixRotationZ | XMMatrixRotationZ |
D3DXMatrixRotationAxis | XMMatrixRotationAxis |
D3DXMatrixRotationQuaternion | XMMatrixRotationQuaternion |
D3DXMatrixRotationYawPitchRoll | XMMatrixRotationRollPitchYaw (Note the order of parameters is different: D3DXMath takes yaw, pitch, roll, DirectXMath takes pitch, yaw, roll) |
D3DXMatrixTransformation | XMMatrixTransformation |
D3DXMatrixTransformation2D | XMMatrixTransformation2D |
D3DXMatrixAffineTransformation | XMMatrixAffineTransformation |
D3DXMatrixAffineTransformation2D | XMMatrixAffineTransformation2D |
D3DXMatrixLookAtRH | XMMatrixLookAtRH |
D3DXMatrixLookAtLH | XMMatrixLookAtLH |
D3DXMatrixPerspectiveRH | XMMatrixPerspectiveRH |
D3DXMatrixPerspectiveLH | XMMatrixPerspectiveLH |
D3DXMatrixPerspectiveFovRH | XMMatrixPerspectiveFovRH |
D3DXMatrixPerspectiveFovLH | XMMatrixPerspectiveFovLH |
D3DXMatrixPerspectiveOffCenterRH | XMMatrixPerspectiveOffCenterRH |
D3DXMatrixPerspectiveOffCenterLH | XMMatrixPerspectiveOffCenterLH |
D3DXMatrixOrthoRH | XMMatrixOrthographicRH |
D3DXMatrixOrthoLH | XMMatrixOrthographicLH |
D3DXMatrixOrthoOffCenterRH | XMMatrixOrthographicOffCenterRH |
D3DXMatrixOrthoOffCenterLH | XMMatrixOrthographicOffCenterLH |
D3DXMatrixShadow | XMMatrixShadow |
D3DXMatrixReflect | XMMatrixReflect |
D3DXQuaternionLength | XMQuaternionLength |
D3DXQuaternionLengthSq | XMQuaternionLengthSq |
D3DXQuaternionDot | XMQuaternionDot |
D3DXQuaternionIdentity | XMQuaternionIdentity |
D3DXQuaternionIsIdentity | XMQuaternionIsIdentity |
D3DXQuaternionConjugate | XMQuaternionConjugate |
D3DXQuaternionToAxisAngle | XMQuaternionToAxisAngle |
D3DXQuaternionRotationMatrix | XMQuaternionRotationMatrix |
D3DXQuaternionRotationAxis | XMQuaternionRotationAxis |
D3DXQuaternionRotationYawPitchRoll | XMQuaternionRotationRollPitchYaw (Note the order of parameters is different: D3DXMath takes yaw, pitch, roll, DirectXMath takes pitch, yaw, roll) |
D3DXQuaternionMultiply | XMQuaternionMultiply |
D3DXQuaternionNormalize | XMQuaternionNormalize or XMQuaternionNormalizeEst |
D3DXQuaternionInverse | XMQuaternionInverse |
D3DXQuaternionLn | XMQuaternionLn |
D3DXQuaternionExp | XMQuaternionExp |
D3DXQuaternionSlerp | XMQuaternionSlerp or XMQuaternionSlerpV |
D3DXQuaternionSquad | XMQuaternionSquad or XMQuaternionSquadV |
D3DXQuaternionSquadSetup | XMQuaternionSquadSetup |
D3DXQuaternionBaryCentric | XMQuaternionBaryCentric or XMQuaternionBaryCentricV |
D3DXPlaneDot | XMPlaneDot |
D3DXPlaneDotCoord | XMPlaneDotCoord |
D3DXPlaneDotNormal | XMPlaneDotNormal |
D3DXPlaneScale | XMVectorScale |
D3DXPlaneNormalize | XMPlaneNormalize or XMPlaneNormalizeEst |
D3DXPlaneIntersectLine | XMPlaneIntersectLine |
D3DXPlaneFromPointNormal | XMPlaneFromPointNormal |
D3DXPlaneFromPoints | XMPlaneFromPoints |
D3DXPlaneTransform | XMPlaneTransform |
D3DXPlaneTransformArray | XMPlaneTransformStream |
D3DXColorNegative | XMColorNegative |
D3DXColorAdd | XMVectorAdd |
D3DXColorSubtract | XMVectorSubtract |
D3DXColorScale | XMVectorScale |
D3DXColorModulate | XMColorModulate |
D3DXColorLerp | XMVectorLerp or XMVectorLerpV |
D3DXColorAdjustSaturation | XMColorAdjustSaturation |
D3DXColorAdjustContrast | XMColorAdjustContrast |
D3DXFresnelTerm | XMFresnelTerm |
Spherical Harmonics Math
The SHmath library is available as an add-on for DirectXMath.
XMSHEvalDirection | Evaluates the Spherical Harmonic basis functions. Equivalent to D3DXSHEvalDirection function. |
XMSHRotate | Rotates SH vector by a rotation matrix. Equivalent to the D3DXSHRotate function. |
XMSHRotateZ | Rotates the SH vector in the Z axis by an angle. Equivalent to the D3DXSHRotateZ function. |
XMSHAdd | Adds two SH vectors. Equivalent to the D3DXSHAdd function. |
XMSHScale | Scales a SH vector. Equivalent to the D3DXSHScale function. |
XMSHDot | Computes the dot product of two SH vectors. Equivalent to the D3DXSHDot function. |
XMSHMultiply2 | Computes the product of two functions represented using SH. Equivalent to D3DXSHMultiply2, D3DXSHMultiply3, D3DXSHMultiply4, D3DXSHMultiply5, and D3DXSHMultiply6. |
XMSHEvalDirectionalLight | Evaluates a directional light and returns spectral SH data. Equivalent to the D3DXSHEvalDirectionalLight function. |
XMSHEvalSphericalLight | Evaluates a spherical light and returns spectral SH data. Equivalent to the D3DXEvalSphericalLight function. |
XMSHEvalConeLight | Evaluates a light that is a cone of constant intensity and returns spectral SH data. Equivalent to the D3DXSHEvalConeLight function. |
XMSHEvalHemisphereLight | Evaluates a light that is a linear interpolant between two colors over the sphere. Equivalent to the D3DXSHEvalHemisphereLight function. |
SHProjectCubeMap | Projects a function represented in a cube map into spherical harmonics. Equivalent to the D3DX11SHProjectCubeMap function. |
Effects (FX)
The Effects system for Direct3D 11 is primarily provided as a porting aid for older code. The library is available on CodePlex.
D3DXCreateEffect |
|
D3DXCreateEffectFromFile |
|
D3D10CreateEffectFromMemory |
|
D3DXCreateEffectPool | Effects 11 does not support 'effect pools' |
D3DXDisassembleEffect |
|
Performance/Profiling
D3DX9 included the entry-points intercepted by PIX for Windows for performance profiling. This is now handled by the DirectX runtime directly and is monitored by the Visual Studio Graphics Diagnostics tool.
D3DPERF_BeginEvent | ID3DUserDefinedAnnotation which is supported by the DirectX 11.1 runtime on Windows 8.x and Windows 7 Service Pack 1 + KB2670838 |
Note
Careful readers will note that there are a few omissions from this table.
- The
ID3DXMatrixStack
from D3DXMath doesn't have a new version, but it's actually pretty easy to implement your own. If someone has a burning need for this, please comment below. - The Precomputed Radiance Transfer (PRT) simulator is only available in closed-source form in legacy D3DX9. There are a number of papers that cover this technology in the literature, and the most generally useful parts of this functionality are the SHmath functions which are available.
- UVAtlas is only available in closed-source form in legacy D3DX9. Again, this technology is covered in the literature.
- Geometry processing is the biggest missing area of functionality, particularly the operations for computing tangent frames, optimizing vertex and index buffers, and generating adjacency information. These are part of the 'Future Work' proposal project DirectXMesh.