What DirectX components are retained in Windows 8 SDK?
Asked Answered
T

1

1

Background: I've developing in Visual Studio 2013 and targeting .Net 4.5, running on Windows 7. I've been trying to get DirectX to run in a WPF context and was referred to SharpDX, and to a sample program using it: http://sharpdxwpf.codeplex.com/SourceControl/latest#SharpDX.WPF.sln

When I tried to build it I got errors because 'd3dcompiler_43.dll' was missing. I fixed that by explicitly downloading the DirectX End User Runtimes (https://www.microsoft.com/en-us/download/details.aspx?id=8109)

My Question: According to MSDN DirectX has been folded into the Windows 8 SDK (https://blogs.msdn.microsoft.com/chuckw/2012/03/22/where-is-the-directx-sdk/), and according to the same document it is included with Visual Studio 2012.

Since I'm using VS2013 (Professional) I assumed that it's also included in that. So why did I have to explicitly download the DirectX End User package to get my DLL? Or does the Windows 8 SDK not include legacy DLL's? (and if so, how are legacy programs supposed to work in Windows 8 and 10?) Could someone please explain the DirectX roadmap in practical terms to me?

Tuberous answered 6/4, 2016 at 16:52 Comment(2)
It is an awkward DLL, the shader compiler is not part of the DirectX runtime and should only be deployed in the same directory as the EXE that uses it. Note that the _43 version is old. What you are supposed to do is use the copy that came with the SDK. That gets murky with a wrapper like SharpDX because it doesn't need the SDK.Angelesangelfish
@Hans_Passant So Hans, is there a non-murky way to get hardware acceleration of 3D lines in a WPF context? WPF has no native 3D line primitive and all the alternatives seem to be unsupported or 3rd-party hobby projects (SlimDX, SharpDX, Helix3D, etc) using deprecated DirectX/Direct3D DLLs. I'm a contract engineer on a short-term assignment and I'd like to leave my client with something they can maintain that doesn't depend on deprecated or unsupported 3rd party components.Tuberous
I
1

The story around D3DCompile is told here.

In short, building with the SharpDX package doesn't require you have the legacy DirectX SDK installed, but you do need the old optional side-by-side DLLs it deployed. You can get the old #43 version by installing DXSETUP.

See Not So DirectSetup for all the details on the legacy DirectX SDK component deployment.

For modern apps using Direct 11 or DirectX 12, you'd be better off using D3DCompile #47. It's built into the Windows 8.1 and Windows 10 OS, the headers are in the Windows 8.1 SDK, and there's a redistable DLL in the Windows 8.1 SDK that you can use for Windows Vista SP2 or later 'side-by-side' deployed with your app. SharpDX should probably be using that one, but they are likely sticking with #43 in case you want to support Windows XP.

For a full list of the DLLs that were deployed by the legacy DirectX SDK and DXSETUP, see KB179113. None of these are deployed by the Windows SDK nor are any of them included with any version of the Windows OS.

Ignatz answered 7/4, 2016 at 6:47 Comment(2)
But I thought that WPF's D3DImage didn't support anything higher than DirectX 9. So I can't use those with WPF, right? As Hans said, this whole thing is murky and I'm only a part-time contractor and I'd like to leave my client with an **un-**murky solution because they're going to be stuck maintaining it.Tuberous
Unless your system requirements include Windows XP, I'd suggest using DirectX11 with WPFDXInterop. If you want to stick with DirectX9 you can, but probably requires you use the legacy DirectX SDK in some fashion.Ignatz

© 2022 - 2024 — McMap. All rights reserved.