Skip to content

Feature support

Philip Rebohle edited this page Jul 19, 2023 · 15 revisions

Feature support

DXVK supports D3D11 up to Feature Level 12_1.

Optional feature support

DXVK supports the following optional features, provided that the Vulkan driver and GPU support the corresponding features:

  • Tiled Resources: Up to Tier 3.
    • Multisampled tiled resources are not supported on all Vulkan drivers.
    • Sharing tiled resources or tile pools between multiple D3D devices is not supported.
    • Shader feedback on raw or structured buffer loads may be inaccurate if a single load straddles 64k pages.
  • Conservative Rasterization: Up to Tier 3.
    • The corresponding Vulkan functionality is provided by VK_EXT_conservative_rasterization.
    • Some Vulkan drivers do not support SV_InnerCoverage and will be limited to Tier 2.
  • Rasterizer Ordered Views.
    • The corresponding Vulkan functionality is provided by VK_EXT_fragment_shader_interlock.
    • Some Vulkan drivers do not implement this functionality even if the hardware can support it.
  • Exporting Viewport Index and Render Target Array Index from vertex shaders or domain shaders.
    • This is expressed by the VPAndRTArrayIndexFromAnyShaderFeedingRasterizer feature in D3D11.
    • The corresponding Vulkan features are shaderOutputViewportIndex and shaderOutputLayer.
  • Exporting the Stencil Reference from pixel shaders.
    • This is expressed by the PSSpecifiedStencilRefSupported feature in D3D11.
    • The corresponding Vulkan functionality is provided by VK_EXT_shader_stencil_export.
    • Not all hardware can support this.
  • Double-precision shader instructions
    • This is expressed by the DoublePrecisionFloatShaderOps and ExtendedDoublesShaderInstructions features in D3D11.

Unsupported features:

The following core API features are unsupported:

  • Class linkage. Compiling shaders that rely on this feature will fail.
  • Predication. Calls to SetPredication are ignored.
    • Support for predicated draws and dispatches may be implemented in the future, other operations will remain unsupported.
    • Prefer using indirect draws or dispatches instead.
  • Target-independent rasterization: In case a render target is bound, the ForcedSampleCount parameter of the current rasterizer state will be ignored.
    • ForcedSampleCount is supported when performing UAV rendering, i.e. rendering without any bound render targets.
    • Most Vulkan drivers do not support 16x MSAA.
  • Video APIs. These are generally not supported.
    • There is rudimentary support for ID3D11VideoContext::VideoProcessorBlt, and related functionality required for setup.

The following optional features are unsupported:

  • Minimum precision.
    • Shader instruction hits to use relaxed precision for certain instructions are ignored. Since DXBC does not natively support 16-bit types, this cannot be supported without a better compiler infrastructure.

The code that determines D3D11 feature support can be found here.

Shared resources

Shared Resources are partially supported, with the following restrictions:

  • Proton patches are required.
  • Not all formats that are guaranteed to be shareable by D3D11 are supported by all drivers.
  • IDXGIKeyedMutex is unsupported due to extremely poor documentation.
  • This does not and will never work at all on Windows.

If at all possible, please avoid sharing resources between different APIs, or different devices of the same API.