Games for Windows and the DirectX SDK blog

Technical tips, tricks, and news about game development for Microsoft platforms including desktop, Xbox, and UWP


Project maintained by walbourn Hosted on GitHub Pages — Theme by mattgraham
Home | Posts by Tag | Posts by Month

Desktop Games on Windows 8.x

gfwtr, win8

Originally posted to Chuck Walbourn's Blog on MSDN,

Developers working on games for Windows are already familiar with the DirectX SDK. Important changes to the DirectX family of technologies are included in the new Windows SDK, which is the new home for the DirectX SDK. Be sure to read “Where is the DirectX SDK?” for the details.

Windows 8.1: Note that these guidelines also apply for Win32 Desktop games running on Windows 8.1. The Windows and Windows Server compatibility cookbook has been updated with notes about Windows 8.1. Pay particular attention to the OS version detection behavior change, as well as the new 200% high-DPI scaling mode. Also note that in Windows 8.1 DirectPlay is now a distinct Windows feature that is off by default.

Windows 10: Be sure to read the Windows 8.1 guidance as it also applies to Windows 10 with up to 500% high-DPI scaling. Note that there is an additional <compatibility> GUID for the new version (see Manifest Madness) , and VerifyVersionInfo is now subject to the same manifest-based behavior as GetVersion(Ex). The Windows and Windows Server compatibility cookbook has been updated with notes about Windows 10.

Game Compatibility Guidelines

With a new release of Windows, publishers and developers want to ensure customers running Windows 8.x continue to have a great experience running their current catalog of games for Windows 7. Developers interested in Windows 8.x software certification program should be sure to read the latest version of those requirements, which can also allow you to have your Desktop application listed in the Windows Store. The older Games for Windows Technical Requirements and Test Requirements documents are still applicable best practices for desktop Win32 games on Windows 8.x. There are some additional things to keep in mind when your game is run on a Windows 8.x machine.

  • The Games Explorer UI is not visible. All games registered with the Game Explorer are surfaced as tiles in the Metro UI, but much of the metadata associated with the title is no longer visible. You still use GDFMaker (latest version is in the Windows 8.1 SDK and Windows 10 SDK) to author the data, and use the existing mechanisms for deploying it. Continue to test your GE registration using Windows 7, verify the Start menu tile shows up when installed on Windows 8.x,  and use the GDF Validator tool to check for known problems with the authored GDF content. Note that on Windows 10 you may find it necessary to create a classic "Start menu shortcut" in addition to using the Game Explorer registration to improve discoverability. [TR 1.1]
  • Registration with the Game Explorer APIs continues to be the mechanism for registering your game with Windows Parental Controls. The Windows SDK version of GDFMaker should be run on an up-to-date copy of Windows 7 or Windows 8.x to ensure it can populate all currently supported rating systems. Note that this copy of GDFMaker requires .NET 4.0. The latest version of the Gameux Install Helper sample is available on GitHubNote the recent changes to the supported rating systems with Windows 8.x and Windows 7 [TR 1.2]
  • There are now three choices for using the XINPUT API depending on your requirements: XINPUT 1.4 is built into Windows 8.x and Windows 10 (useable by both Windows Store apps and desktop Win32 applications), XINPUT 9.1.0 for simplified common-controller usage across all versions of Windows without any redistribution package, and the existing DirectX SDK version XINPUT 1.3 which requires DirectSetup to deploy. [TR 1.4]
  • High-DPI scenarios are becoming more common. Be sure to test your application with 125% and 150% scaling, and populate the EXEs manifest with ``true``. Windows 8.1 includes a 200% scaling option as well, and the recommended full-screen Direct3D game manifest element is now ``True/PM``.  Windows 10 supports up to 500% scaling. [TR 1.8]
  • Only a limited set of desktop Win32 applications are supported on Windows RT (aka Windows on ARM). Games that run on Windows 7 can and should run correctly on Windows 8.x and Windows 10 x86 and x64 systems. [TR 2.2]
  • Ensure any OS checks are done correctly. Windows 8 is version "6.2", and will pass the current 'minimum bar' tests recommended for game deployment. Windows 8.1 is version "6.3", but note that GetVersion(Ex) APIs are now deprecated and have new appcompat behavior by default. With Windows 10 ``VersionVersionInfo`` has a similar behavior, and the OS has a version of "10.0" (it was "6.4" the early Technical Previews). [TR 2.5]
  • The "DirectX End-User Redistribution" package will run successfully on Windows 8.x and Windows 10 machines to deploy D3DX9, D3DX10, D3DX11, XINPUT 1.3, XAUDIO 2.7, XACTEngine, etc. as it does on Windows 7.  There is, however, a known issue with DirectSetup on systems with only .NET 4.0 installed due to the deployment handling of the legacy Managed DirectX 1.1 assemblies. This applies to Windows 10, Windows 8.x (which comes with .NET 4.5 by default), and 'fresh' Windows XP systems with the .NET 4.0 runtime installed but not any version of .NET prior to that. While Windows 8.x has an application compatibility behavior to resolve this automatically (which requires network access), we recommend that games continuing to deploy DirectSetup update to the DirectX SDK (June 2010) refreshed version of the REDIST files. As always, be sure to understand if you really need to use DirectSetup at all for your title, and if you do trim it down to the minimum required set of CABs. [TR 3.4]
  • Games that require the .NET "2.0" compatible runtime (2.0, 3.0, 3.5) should continue to use existing deployment mechanisms. These will trigger an application compatibility behavior on Windows 8.x to enable the .NET 3.5 runtime automatically (which requires network access). However, we recommend that .NET developers move to the .NET 4.0 runtime. Note that the legacy Managed DirectX 1.1 assemblies are not compatible with the .NET 4.x runtime. Also, the .NET 1.1 framework is not supported on Windows 7, Windows 8.x, or Windows 10. [TR 3.4]
  • Use of an 'autorunner' or other pre-install technology that relies on .NET is not recommended. Only .NET 2.0 compatible runtimes can be assumed present on Windows Vista and Windows 7, and only the .NET 4.0 compatible runtime is present on Windows 8.x and Windows 10 by default. [TR 3.7]
  • There is an updated Application Verifier for Windows 8. This is included as part of the Windows 8.x SDK or Windows 10 SDK. It is recommended you test with all the Basics tests including the new COM, Exceptions, Leak, RPC, SRWLock, and Threadpool. [TR 4.2]

In addition to the existing Windows 7 best practices, you should review the Windows 8 and Windows Server 2012 Compatibility Cookbook for detailed application compatibility notes on various Windows technologies. In particular, you should review the topics

Recommendations for desktop Win32 Titles

In addition to learning about the new Windows Store app model (a.k.a. Metro style apps), here are some important things to consider when creating Windows game titles for Windows 7 and for the desktop of Windows 8.

  • Invest in the Direct3D 11 graphics API. The Direct3D 11 API provides a broad range of hardware support through the 9.x feature levels on Windows 8, Windows 7, and Windows Vista machines with DirectX 11 installed. Continuing to rely on the legacy Direct3D 9 poses a number of challenges including limited access to debugging support, and limited driver support. Windows 8 Hardware Certification Requirements will ensure that that the majority of desktop form-factor x86/x64 machines will have Feature Level 10.0 or later device support. Windows Store apps must use the Direct3D 11 API and cannot use the Direct3D 9 API.

Windows 10: Direct3D 12 is also an option for games on Windows 10. Keep in mind updated WDDM 2.0 drivers are required to support Direct3D 12, and only Feature Level 11.0 or better graphics hardware is getting new drivers.

  • Minimize or eliminate dependencies on legacy technology. D3DX9, D3DX10, and D3DX11 are deprecated components. There are a number of recommended replacement technologies that should be used instead: DirectXMath, DirectXTK, DirectXTex, DirectXMesh. XACT is also deprecated. No version of D3DX is supported for Windows Store apps. DirectInput and DirectSound are not available for Windows Store apps or on the Windows RT platform. For a full list of D3DX replacements, see this post.
  • Minimize or eliminate the dependencies on the "DirectSetup" redistribution package. "DirectX" technologies are included with the Windows OS, and these are never updated by the use of the "DirectX End-User Runtime" packages. Solutions for removing the remaining dependencies exist and should be adopted. The latest D3DCompiler and D3DSCX from the new Windows SDK can be deployed "application local" with desktop applications without requiring a redistribution package. Note these DLLs may not be redistributed with Windows Store apps.
  • Adopt C++11 compilers, standard libraries, and features. Visual Studio 2010 and later support modern C++ constructs which can eliminate direct dependences on some legacy APIs, improve the portability of the code, and can provide a bridge to Windows Store apps. See the Visual C++ Team Blog for more information. Also be sure to enable compiler security features such as /SAFESEH, /NXCOMPAT, and /DYNAMICBASE which are required for the Windows 8 certifications for both Windows Store apps and Win32 desktop apps.

VS 2015: Note that Visual C++ 2015 can target Windows Vista SP2, Windows 7 SP1, Windows 8.1, and Windows 10. It does not support targeting Windows 7 RTM or Windows 8.0 which are both out-of-support.

Update: This page has been updated on October 25, 2012 for Windows 8 GA (was originally written for Windows 8 Consumer Preview).

Related: Dual-use Coding Techniques for Games, DirectX SDKs of a certain age, Manifest Madness