Is Effects 11 deprecated?

Jul 16, 2013 at 7:07 PM
The disclaimer states
The fx_5_0 profile support in the HLSL compiler is deprecated, and does not fully support
DirectX 11.1 HLSL features such as minimum precision types. It is supported in the Windows
8.0 SDK version of the HLSL compiler (FXC.EXE) and D3DCompile API (#46), but could be
removed in a future update.
What does that mean?
Jul 16, 2013 at 7:20 PM
Edited Jan 24 at 5:07 PM
The Effects 11 library has three major dependencies:
  • The Direct3D 11.0 API
  • The HLSL shader compiler's fx_5_0 shader profile
  • The D3DReflect API for obtaining shader metadata at runtime

Direct3D 11.0

The Direct3D 11.0 API is supported in Windows Vista Service Pack 2 with KB 971644 or later. This API works for Win32 desktop applications, Windows Store apps, and Windows phone. Due to interface inheritance, you can mix the use of Direct3D 11.0 interfaces with the Direct3D 11.1 (Windows 8 / Windows 7 SP1 with KB 2670838) and Direct3D 11.2 (Windows 8.1) so Effects 11 continues to function even with newer runtimes.

Effects 11 does not make use of any specific newer features exposed by Direct3D 11.1 or Direct3D 11.2, but you can mix use of all 11.x interfaces so this doesn't pose a particular challenge to the future of this library.,

HLSL shader compiler and the fx_5_0 shader profile

The Effects 11 runtime requires shaders and shader metadata generated by the HLSL compiler. This is accomplishing using FXC.EXE or the D3DComplie_*.DLL via the D3DCompile APIs. This profile is supported in D3DCompile_43.DLL shipped in the legacy DirectX SDK (June 2010) release. It is supported by the D3DCompile_46.DLL that shipped in the Windows 8.0 SDK and is included in Visual Studio 2012, but does not implement newer features for the fx_5_0 profile such as minimum precision types.

The D3DComplie_47.DLL included in the Windows SDK for Windows 8.1 Preview and the Visual Studio 2013 Preview continues to support the fx_5_0 shader profile but generates a warning:
warning X4717: Effects deprecated for D3DComplier_47
This means Effects 11 is usable now with the current and recent generation HLSL compilers, but in a future update when support is removed Effects 11 will no longer be usable with the latest generation of the compiler. It can be used with older version of the compiler on an "as is" basis.

D3DReflect API

The required reflection APIs are located in D3DCompile*.DLL and must match the HLSL complier version used to compile the shaders. Since D3DCompile and D3DReflect APIs are not available for Windows Store apps on Windows 8 or Windows RT for deployment, Effects 11 is not usable for these applications. The latest version of these APIs are now available for use in Windows Store apps on Windows 8.1, so it is technically possible to use Effects 11 in such applications but such use is not recommended.
Jul 16, 2013 at 7:57 PM
Note that the original releases of Effects 11 included in the legacy DirectX SDK made use of a few D3DX11 headers and types. All versions of D3DX are deprecated and are not present in the Windows 8.x SDK. These dependencies were fairly trivial to remove, so the latest version of Effects 11 has no dependencies on D3DX11.

See DirectX SDKs of a certain age for more information on DirectX SDK component deprecation status and suggested replacements.
May 8, 2014 at 6:18 PM
Edited Jul 11, 2014 at 5:25 PM
There is experimental support for Windows Store Apps for Windows 8.1, Windows phone 8.1, and Xbox One available if you sync with the CodePlex source control depot, but neither are tested (hence the required VCXPROJ files are not included in the official release downloads). Both platforms are also subject to the fact that the fx_5_0 profile support is deprecated, and such use is not recommended.
Oct 15, 2014 at 3:41 PM

Is there a way to easily suppress the X4717 warning?
Oct 15, 2014 at 4:08 PM
Edited Oct 15, 2014 at 4:08 PM
No, it appears not.
#pragma warning(disable : 4717)
doesn't work because the warning is emitted before the source file is parsed.
Oct 16, 2014 at 7:17 AM
So if i'm correct there is no way to use the deprecated effects on Win8.1 without this warning poping up? (Except for not showing warnings, but for debugging purposes it's nice to have let the compile errors popup).
Oct 17, 2014 at 5:40 PM
I'm confirming with the compiler team, but there does not seem to be a way to suppress this warning.