New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Constant buffer offset support on DX11.1 Windows 7 #2182

Open
fkaa opened this Issue Jun 26, 2018 · 1 comment

Comments

Projects
None yet
2 participants
@fkaa
Copy link
Member

fkaa commented Jun 26, 2018

Constant buffer offsets seems pretty essential to have, and is available first in 11.1 through PSSetConstantBuffers1. Windows 7 SP1 introduces DX 11.1 but emphasizes that most features are unavailable since they require the newer driver model (WDDM 1.1 vs WDDM 1.2). Most documentation seems to point that it works on SP1, but not sure. Don't suppose there is a gpuinfo.org for DX?

Windows 8 introduced the WDDM 1.2 driver model, which provided improvements across the associated API surface for all feature levels. When reading the Direct3D11.1 documentation, understand that new drivers means WDDM 1.2 drivers. These updated driver versions, as well as most optional features exposed through CheckFeatureSupport, are unavailable on Windows 7. Since there is no guarantee that these optional features are available, make sure your applications have appropriate fallback behaviors in the event that the desired functionality is unavailable.

There’s one important exception. Several features, such as PSSetConstantBuffers1 with constant buffer offsets, require new drivers for feature level 10 and higher, but are actually emulated for feature level 9. This emulation is available on Windows 7 with the platform update. See D3D11_FEATURE_DATA_D3D11_OPTIONS for more info about which features are emulated.

https://docs.microsoft.com/en-us/windows/desktop/direct3darticles/platform-update-for-windows-7

This seems to suggest that PSSetConstantBuffers1 is available on W7 SP1 assuming the driver supports it. Driver docs confirm that it's a matter of driver model and not HW limitation:

This feature must be supported by all WDDM 1.2 drivers for Direct3D 10+ hardware. The Direct3D 11 runtime emulates the appropriate behavior for Feature Level 9_x.

https://docs.microsoft.com/en-us/windows-hardware/drivers/display/directx-feature-improvements-in-windows-8#buffers

Scary section from Nvidias blog:

Please note that the DirectX 11.1 implementation of XXSetConstantBuffers1() and of UpdateSubResource1() do not work on Windows 7 ™. You can really only rely on proper support on Windows 8 ™ and above.

https://developer.nvidia.com/content/constant-buffers-without-constant-pain-0

@zeux

This comment has been minimized.

Copy link

zeux commented Aug 14, 2018

JFYI our data on this says that you can't rely on this feature. Specifically:

  • For FL11 users, only 85% can use CB offsetting
  • For FL10.1 users, only ~40% can use CB offsetting
  • No FL10.0 users can use CB offsetting

This is based on our (Roblox) data on our userbase, which is probably close to a typical browser audience.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment