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.

Clone this wiki locally