locked
Store DirectX requirements for ARM.

    Question

  • If I submit an app package to the store with ARM support in it, the store requires me to select 'Available to all versions' in the DirectX category.  This means I can't say 'Requires DX10 and above'.

    Since my app is a Metro app, there is a possibility that it will be installed on a Desktop system that only has DX9 hardware (Win8 min requirements) - and it requires D2D/DX10 support.

    Does 'Available to all versions' imply DX10/11 support?

    Tuesday, September 25, 2012 10:04 AM

Answers

  • Windows Store apps always use DX11 code.

    What we're talking about here is feature level support. If you target ARM devices then the Windows Store policy for Direct3D apps requires that you support feature level 9_1 and higher. If you only target x86 then you can specify a minimum feature level.

    The general recommendation is to support 9_1 and then provide an improved experience if higher level features are available. See Developing for different Direct3D feature levels for more details.

    --Rob

    Tuesday, September 25, 2012 3:17 PM
    Owner
  • As I understand it, the rule for Windows Store apps is pretty simple:

    For Windows RT (aka ARM), your app has to support Feature Level 9.1 as the minimum. You can expect many systems to have Feature level 9.3, so it makes sense to scale up to 9.3 if you can for better shaders and experience for Windows RT.

    For Windows 8 (aka x86 and x64), your app can use any feature level as the baseline and declare it in your app submission so the Windows Store knows how to filter it. You must still have logic in your application that will create a Feature Level 9.1 device and render a message that says you require a higher feature level as a safety and support measure. Note the Windows Store policy here says you can require a higher minimum feature level if you don't support ARM at all, but if you have an ARM version you are expected to support 9.1 across the board as the baseline.

    Many Windows 8 systems will have Feature Level 11.0 or higher devices. Almost all Windows 8 systems will have Feature Level 10.0 or higher. You might find some older netbooks with Windows 8 upgrades installed on them with only Feature Level 9.x support, but these are likley to be pretty rare in practice.

    So you probably will want to do something like the following:

    bool useWarp = false; // You might find it useful switch on useWarp to check // for bugs in the driver. WARP is a better choice than // REF for this kind of testing these days //useWrap=true; DWORD createDeviceFlags = 0; #ifdef _DEBUG createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; #endif // You can trim down or expand this list to your applications needs, // but must keep D3D_FEATURE_LEVEL_9_1 in the list. It // depends on what hardware features you are trying to // use, but 9.1, 9.3, 10.0, and 11.0 are a good minimum // set for the range of Windows 8 and Windows RT systems. // You might want to add 9.2, 10.1 and/or 11.1 to this // list if you want to break up your scaling to that // granularity. This code assumes FL 10.0 is your baseline. static const D3D_FEATURE_LEVEL lvl[] = { D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_0, D3D_FEATURE_LEVEL_9_1 }; ID3D11Device* pDevice = nullptr; D3D_DRIVER_TYPE driverType = (useWarp) ? D3D_DRIVER_TYPE_WARP : D3D_DRIVER_TYPE_HARDWARE; D3D_FEATURE_LEVEL level = 0; HRESULT hr = D3D11CreateDevice( nullptr, driverType, nullptr, createDeviceFlags, lvl, _countof(lvl), D3D11_SDK_VERSION, &pDevice, &level, nullptr ); // assuming 10.0 is your minimum for x86/x64

    #ifdef _M_ARM

    #error "This app can't be released on ARM since it has a minimum FL higher than 9.1"

    #endif

    if ( level < D3D_FEATURE_LEVEL_10_0 ) { // need to display a message on the pDevice that // says "This app requires Direct3D Feature Level 10.0 // or higher". }

    See Direct3D Feature Levels for some details.







    Tuesday, September 25, 2012 7:54 PM

All replies

  • Windows Store apps always use DX11 code.

    What we're talking about here is feature level support. If you target ARM devices then the Windows Store policy for Direct3D apps requires that you support feature level 9_1 and higher. If you only target x86 then you can specify a minimum feature level.

    The general recommendation is to support 9_1 and then provide an improved experience if higher level features are available. See Developing for different Direct3D feature levels for more details.

    --Rob

    Tuesday, September 25, 2012 3:17 PM
    Owner
  • As I understand it, the rule for Windows Store apps is pretty simple:

    For Windows RT (aka ARM), your app has to support Feature Level 9.1 as the minimum. You can expect many systems to have Feature level 9.3, so it makes sense to scale up to 9.3 if you can for better shaders and experience for Windows RT.

    For Windows 8 (aka x86 and x64), your app can use any feature level as the baseline and declare it in your app submission so the Windows Store knows how to filter it. You must still have logic in your application that will create a Feature Level 9.1 device and render a message that says you require a higher feature level as a safety and support measure. Note the Windows Store policy here says you can require a higher minimum feature level if you don't support ARM at all, but if you have an ARM version you are expected to support 9.1 across the board as the baseline.

    Many Windows 8 systems will have Feature Level 11.0 or higher devices. Almost all Windows 8 systems will have Feature Level 10.0 or higher. You might find some older netbooks with Windows 8 upgrades installed on them with only Feature Level 9.x support, but these are likley to be pretty rare in practice.

    So you probably will want to do something like the following:

    bool useWarp = false; // You might find it useful switch on useWarp to check // for bugs in the driver. WARP is a better choice than // REF for this kind of testing these days //useWrap=true; DWORD createDeviceFlags = 0; #ifdef _DEBUG createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; #endif // You can trim down or expand this list to your applications needs, // but must keep D3D_FEATURE_LEVEL_9_1 in the list. It // depends on what hardware features you are trying to // use, but 9.1, 9.3, 10.0, and 11.0 are a good minimum // set for the range of Windows 8 and Windows RT systems. // You might want to add 9.2, 10.1 and/or 11.1 to this // list if you want to break up your scaling to that // granularity. This code assumes FL 10.0 is your baseline. static const D3D_FEATURE_LEVEL lvl[] = { D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_0, D3D_FEATURE_LEVEL_9_1 }; ID3D11Device* pDevice = nullptr; D3D_DRIVER_TYPE driverType = (useWarp) ? D3D_DRIVER_TYPE_WARP : D3D_DRIVER_TYPE_HARDWARE; D3D_FEATURE_LEVEL level = 0; HRESULT hr = D3D11CreateDevice( nullptr, driverType, nullptr, createDeviceFlags, lvl, _countof(lvl), D3D11_SDK_VERSION, &pDevice, &level, nullptr ); // assuming 10.0 is your minimum for x86/x64

    #ifdef _M_ARM

    #error "This app can't be released on ARM since it has a minimum FL higher than 9.1"

    #endif

    if ( level < D3D_FEATURE_LEVEL_10_0 ) { // need to display a message on the pDevice that // says "This app requires Direct3D Feature Level 10.0 // or higher". }

    See Direct3D Feature Levels for some details.







    Tuesday, September 25, 2012 7:54 PM