Direct3D feature levels discussion

Malo,

as of now, only WARP12 (Microsoft Basic Render Driver) in Windows 10 version 1703 (build 16053) reports SM6 as the highest shader model. AMD and NVidia offer "experimental" driver support under a special developer mode, which has to be enabled in Settings.

While you can use my console tool to check for this "experimental" SM6 support (as per this post), I did not add this option to the default batch file, because real-world applications are not expected to use "experimental" features.
 
Last edited:
Vega Frontier Edition with Dev-Tools enabled:

Code:
Direct3D 12 feature checker (July 2017) by DmitryKo
https://forum.beyond3d.com/posts/1840641/

Windows 10 version 1703 (build 15063)
Checking for experimental shader models

ADAPTER 0
"Radeon Vega Frontier Edition"
VEN_1002, DEV_6863, SUBSYS_6B761002, REV_00
Dedicated video memory : 4211945472  bytes
Total video memory : 4175951872  bytes
Video driver version : 22.19.384.2
Maximum feature level : D3D_FEATURE_LEVEL_12_1 (0xc100)
DoublePrecisionFloatShaderOps : 1
OutputMergerLogicOp : 1
MinPrecisionSupport : D3D12_SHADER_MIN_PRECISION_SUPPORT_16_BIT (2)
TiledResourcesTier : D3D12_TILED_RESOURCES_TIER_3 (3)
ResourceBindingTier : D3D12_RESOURCE_BINDING_TIER_3 (3)
PSSpecifiedStencilRefSupported : 1
TypedUAVLoadAdditionalFormats : 1
ROVsSupported : 1
ConservativeRasterizationTier : D3D12_CONSERVATIVE_RASTERIZATION_TIER_3 (3)
StandardSwizzle64KBSupported : 0
CrossNodeSharingTier : D3D12_CROSS_NODE_SHARING_TIER_NOT_SUPPORTED (0)
CrossAdapterRowMajorTextureSupported : 0
VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation : 1
ResourceHeapTier : D3D12_RESOURCE_HEAP_TIER_2 (2)
MaxGPUVirtualAddressBitsPerResource : 44
MaxGPUVirtualAddressBitsPerProcess : 44
Adapter Node 0: 	TileBasedRenderer: 0, UMA: 0, CacheCoherentUMA: 0, IsolatedMMU: 1
HighestShaderModel : D3D12_SHADER_MODEL_6_0 (0x0060)
WaveOps : 1
WaveLaneCountMin : 64
WaveLaneCountMax : 64
TotalLaneCount : 4096
ExpandedComputeResourceStates : 1
Int64ShaderOps : 1
RootSignature.HighestVersion : D3D_ROOT_SIGNATURE_VERSION_1_1 (2)
DepthBoundsTestSupported : 1
ProgrammableSamplePositionsTier : D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_NOT_SUPPORTED (0)
ShaderCache.SupportFlags : D3D12_SHADER_CACHE_SUPPORT_SINGLE_PSO | LIBRARY (3)
 
Quick question, why is the dedicated memory value unsigned 32bit integer max?
 
mmh... that's odd it should be a uint64_t.
Could it be different if the program is 32bits ?
 
I've fixed argument size modifiers so memory sizes that exceed 4GB (4096 MB or 4 294 967 295 bytes) won't wrap around now. It will also display megabytes (rounded to 0.1) in addition to bytes. Please re-download the archive.

DXGI doesn't report the exact size of onboard physical video memory though, only the size of "dedicated video memory, dedicated system memory and shared system memory" - legacy memory pools introduced in DirectX 5 era for AGP video cards.

With a x64 build of the checker tool, my Radeon R9 290X 4GB now reports ~4073.47MB of "dedicated video" memory and ~11.92GB of "total" video memory (="dedicated video" + "dedicated system" + "shared system"), on a PC with 16 GB of system RAM. It used to report 3GB of "dedicated video" memory and ~4095.94MB of "total" memory in a 32-bit build.
This is because DXGI_ADAPTER_DESC2 structure doesn't use UINT64 for memory size fields - it uses size_t which is 64-bit when compiled for the x64 platform, and 32-bit on the x86 platform.
 
Last edited:
BTW I've just checked DXCapsViewer.exe from the Windows 10 SDK build 16225, and it's not correct in reporting Root Signature and Shader Model versions, which should have been signature v1.1 and SM6.0 for WARP12 (in Windows 10 RS3 Insider Preview build 16237).

Looks like maintainers of this tool fell for the same trap as I did, because MSDN documentation for D3D_FEATURE_DATA_SHADER_MODEL completely omits the requirement to pre-populate HighestShaderModel field with the highest model to query for - which you can only learn by inspecting the SDK header file... and when you request a shader model not supported in this particular Windows build (which is SM6.1 as of SDK 16225), it results in runtime error 80070057 E_INVALIDARG as far as I can tell...
 
Last edited:
BTW I've just checked DXCapsViever.exe from the Windows 10 SDK build 16225, and it's not correct in reporting Root Signature and Shader Model versions, which should have been signature v1.1 and SM6.0 for WARP12 (in Windows 10 RS3 Insider Preview build 16237).

Looks like maintainers of this tool fell for the same trap as I did, because MSDN documentation for D3D_FEATURE_DATA_SHADER_MODEL completely omits the requirement to pre-populate HighestShaderModel field with the highest model to query for - which you can only learn by inspecting the SDK header file... and when you request a shader model not supported in this particular Windows build (which is SM6.1 as of SDK 16225), it results in runtime error 80070057 E_INVALIDARG as far as I can tell...
Hopefully, when they will complete the switch to the new github docs platform, reporting such documentation errors will be easier and more productive. But now, with 3 different documentation platforms, even searching from scratch something is a complete mess (and this is why I made a custom search handler in my browser, which redirects to the old-solid MSDN library).
 
Intel Pentium G4560 w/HD Graphics 610 (60-$ integrated Graphics)
Driver:

Code:
PS C:\Users\CarstenS\Downloads\D3D12CheckFeatureSupport> .\D3D12CheckFeatureSupport.exe /sm6
Direct3D 12 feature checker (July 2017) by DmitryKo (x64)
https://forum.beyond3d.com/posts/1840641/

Windows 10 version 1703 (build 15063)
Checking for experimental shader models

ADAPTER 0
"Intel(R) HD Graphics 610"
VEN_8086, DEV_5902, SUBSYS_D0001458, REV_04
Dedicated video memory : 128.0 MB (134217728 bytes)
Total video memory : 4167.9 MB (4370333696 bytes)
Video driver version : 22.20.16.4729
Maximum feature level : D3D_FEATURE_LEVEL_12_1 (0xc100)
DoublePrecisionFloatShaderOps : 1
OutputMergerLogicOp : 1
MinPrecisionSupport : D3D12_SHADER_MIN_PRECISION_SUPPORT_16_BIT (2)
TiledResourcesTier : D3D12_TILED_RESOURCES_TIER_3 (3)
ResourceBindingTier : D3D12_RESOURCE_BINDING_TIER_3 (3)
PSSpecifiedStencilRefSupported : 1
TypedUAVLoadAdditionalFormats : 1
ROVsSupported : 1
ConservativeRasterizationTier : D3D12_CONSERVATIVE_RASTERIZATION_TIER_3 (3)
StandardSwizzle64KBSupported : 1
CrossNodeSharingTier : D3D12_CROSS_NODE_SHARING_TIER_NOT_SUPPORTED (0)
CrossAdapterRowMajorTextureSupported : 1
VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation : 1
ResourceHeapTier : D3D12_RESOURCE_HEAP_TIER_2 (2)
MaxGPUVirtualAddressBitsPerResource : 38
MaxGPUVirtualAddressBitsPerProcess : 48
Adapter Node 0:         TileBasedRenderer: 0, UMA: 1, CacheCoherentUMA: 1, IsolatedMMU: 1
HighestShaderModel : D3D12_SHADER_MODEL_5_1 (0x0051)
WaveOps : 1
WaveLaneCountMin : 16
WaveLaneCountMax : 16
TotalLaneCount : 192
ExpandedComputeResourceStates : 1
Int64ShaderOps : 1
RootSignature.HighestVersion : D3D_ROOT_SIGNATURE_VERSION_1_1 (2)
DepthBoundsTestSupported : 0
ProgrammableSamplePositionsTier : D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_1 (1)
ShaderCache.SupportFlags : D3D12_SHADER_CACHE_SUPPORT_SINGLE_PSO | LIBRARY (3)
StandardSwizzle64KBSupported : 1
ProgrammableSamplePositionsTier : D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_1 (1)

[my bold, removed Microsoft Basis Display Adapter]
 
On not so great news:
Code:
C:\Users\CarstenS\Downloads\D3D12CheckFeatureSupport>D3D12CheckFeatureSupport.exe /sm6
Direct3D 12 feature checker (July 2017) by DmitryKo (x64)
https://forum.beyond3d.com/posts/1840641/

Windows 10 version 1607 (build 14393)
Checking for experimental shader models
Warning: experimental features are not supported in d3d12.dll

ADAPTER 0
"AMD Radeon (TM) R9 Fury Series"
VEN_1002, DEV_7300, SUBSYS_0B361002, REV_CA
Dedicated video memory : 4071.0 MB (4268777472 bytes)
Total video memory : 12236.0 MB (12830353408 bytes)
Video driver version : 22.19.673.0
Maximum feature level : D3D_FEATURE_LEVEL_12_0 (0xc000)
DoublePrecisionFloatShaderOps : 1
OutputMergerLogicOp : 1
MinPrecisionSupport : D3D12_SHADER_MIN_PRECISION_SUPPORT_NONE (0)
TiledResourcesTier : D3D12_TILED_RESOURCES_TIER_2 (2)
ResourceBindingTier : D3D12_RESOURCE_BINDING_TIER_3 (3)
PSSpecifiedStencilRefSupported : 1
TypedUAVLoadAdditionalFormats : 1
ROVsSupported : 0
ConservativeRasterizationTier : D3D12_CONSERVATIVE_RASTERIZATION_TIER_NOT_SUPPORTED (0)
StandardSwizzle64KBSupported : 0
CrossNodeSharingTier : D3D12_CROSS_NODE_SHARING_TIER_NOT_SUPPORTED (0)
CrossAdapterRowMajorTextureSupported : 0
VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation : 1
ResourceHeapTier : D3D12_RESOURCE_HEAP_TIER_2 (2)
MaxGPUVirtualAddressBitsPerResource : 40
MaxGPUVirtualAddressBitsPerProcess : 40
Adapter Node 0:         TileBasedRenderer: 0, UMA: 0, CacheCoherentUMA: 0
HighestShaderModel : D3D12_SHADER_MODEL_5_1 (0x0051)
WaveOps : 1
WaveLaneCountMin : 64
WaveLaneCountMax : 64
TotalLaneCount : 4096
ExpandedComputeResourceStates : 1
Int64ShaderOps : 1
RootSignature.HighestVersion : D3D_ROOT_SIGNATURE_VERSION_1_1 (2)
MinPrecisionSupport : D3D12_SHADER_MIN_PRECISION_SUPPORT_NONE (0)

Apparently, AMD removed FP16-support from their newest (newer? didn't check every single driver) drivers for Fiji as well as Polaris (did not check Tonga yet).
For Vega, it's there of course.
 
Yes, AMD disabled FP16 fon GCN3/GCN4 ISA GPUs since 17.2.x.
No official word by AMD.
This is a shame, doesn't matter if GCN3/4 GPUs have a FP32:FP16 1:1 ratio, FP16 support is still useful for development purpose, moreover I don't think final consumers will be angry if their GPUs can run the some computations using lower heat and power (not sure if on GCN3/4 FP16 can also save bandwidth).
 
I've noticed that NVidia has Fermi running WDDM 2.2 now, which is newer compliance than some (all?) GCN or my Skylake IGP (WDDM 2.1). Haswell, Broadwell, and Braswell are at WDDM 2.0. Baytrail / Ivy Bridge run WDDM 1.3. VLIW4/5 D3D11 Radeons are at WDDM 1.3. too.
 
Last edited:
All GCN gpus have WDDM 2.2 drivers..
I did a clean install of Win 10 15063 on a notebook with Kaveri A10 7300 two days ago and the latest driver from AMD's site had it on WDDM 2.1. Crimson 17.7.2. Maybe it's a Kaveri thing.
 
Last edited:
I'm quite sure my laptop with A10 8700P and R7 M360 reported WDDM 2.2 last time I checked.
I was surprised though that one of my older PCs, using A10 3870k, only reports WDDM 1.2 and have no official Catalyst driver package, whereas all other DX11 Radeons report WDDM 1.3.
The DX10/10.1 Radeons report WDDM 1.1, 8800GT reports WDDM 1.2.
 
Last edited:
I'm quite sure my laptop with A10 8700P and R7 M360 reported WDDM 2.2 last time I checked.
I was surprised though that one of my older PCs, using A10 3870k, only reports WDDM 1.2 and have no official Catalyst driver package, whereas all other DX11 Radeons report WDDM 1.3.
The DX10/10.1 Radeons report WDDM 1.1, 8800GT reports WDDM 1.2.
Yeah I worked on a A8 3500M recently and apparently AMD only offer a Windows 10 driver via Windows Update . It is about 6 months older than the final driver for D3D11 cards.

The D3D10/10.1 cards haven't really had a driver update since 2012/2013. Windows Update pulls in some kind of old WDDM 1.1 driver that works well enough though. Unless you need Catalyst Control Center functionality, in which case you have to install a Windows 8 package that isn't entirely compatible with Windows 8.1 / 10 and will crash sometimes. I needed to do this in a case because HDMI was underscanning. NVidia supports their hardware much longer.
 
Last edited:
Did Intel enabled tiled resources (tier1) on Haswell iGPUs? My SP3 reports it as supported.. Not sure how much can help on a 31-bit virtual address, but anyone has any news about it?

I am using version 20.19.15.4703... (downloaded from windows update catalogue).

Code:
Windows 10 version 1703 (build 15063)

ADAPTER 0
"Intel(R) HD Graphics Family"
VEN_8086, DEV_0A16, SUBSYS_00051414, REV_0B
Dedicated video memory : 112.5 MB (117964800 bytes)
Total video memory : 2160.5 MB (2265448448 bytes)
Video driver version : 20.19.15.4703
Maximum feature level : D3D_FEATURE_LEVEL_11_1 (0xb100)
DoublePrecisionFloatShaderOps : 1
OutputMergerLogicOp : 1
MinPrecisionSupport : D3D12_SHADER_MIN_PRECISION_SUPPORT_NONE (0)
TiledResourcesTier : D3D12_TILED_RESOURCES_TIER_1 (1)
ResourceBindingTier : D3D12_RESOURCE_BINDING_TIER_1 (1)
PSSpecifiedStencilRefSupported : 0
TypedUAVLoadAdditionalFormats : 0
ROVsSupported : 1
ConservativeRasterizationTier : D3D12_CONSERVATIVE_RASTERIZATION_TIER_NOT_SUPPORTED (0)
StandardSwizzle64KBSupported : 0
CrossNodeSharingTier : D3D12_CROSS_NODE_SHARING_TIER_NOT_SUPPORTED (0)
CrossAdapterRowMajorTextureSupported : 0
VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation : 1
ResourceHeapTier : D3D12_RESOURCE_HEAP_TIER_2 (2)
MaxGPUVirtualAddressBitsPerResource : 31
MaxGPUVirtualAddressBitsPerProcess : 31
Adapter Node 0:     TileBasedRenderer: 0, UMA: 1, CacheCoherentUMA: 1, IsolatedMMU: 1
HighestShaderModel : D3D12_SHADER_MODEL_5_1 (0x0051)
WaveOps : 0
WaveLaneCountMin : 4
WaveLaneCountMax : 4
TotalLaneCount : 4
ExpandedComputeResourceStates : 1
Int64ShaderOps : 0
RootSignature.HighestVersion : D3D_ROOT_SIGNATURE_VERSION_1_1 (2)
DepthBoundsTestSupported : 0
ProgrammableSamplePositionsTier : D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_NOT_SUPPORTED (0)
ShaderCache.SupportFlags : D3D12_SHADER_CACHE_SUPPORT_SINGLE_PSO (1)

Note it is non reported as supported under direct3d 11 runtime.

EDIT: BC1 and R8G8B8A8 are reported as unsupported and fail to create related resources, so it just look like a driver bug..
 
Last edited:
Finally, programmable sample position from AMD:

Code:
Direct3D 12 feature checker (July 2017) by DmitryKo (x64)
https://forum.beyond3d.com/posts/1840641/

Windows 10 version 1703 (build 15063)

ADAPTER 0
"AMD Radeon (TM) R9 380 Series"
VEN_1002, DEV_6938, SUBSYS_E308174B, REV_F1
Dedicated video memory : 4071.4 MB (4269203456 bytes)
Total video memory : 12259.1 MB (12854614016 bytes)
Video driver version : 22.19.676.0
Maximum feature level : D3D_FEATURE_LEVEL_12_0 (0xc000)
DoublePrecisionFloatShaderOps : 1
OutputMergerLogicOp : 1
MinPrecisionSupport : D3D12_SHADER_MIN_PRECISION_SUPPORT_NONE (0)
TiledResourcesTier : D3D12_TILED_RESOURCES_TIER_2 (2)
ResourceBindingTier : D3D12_RESOURCE_BINDING_TIER_3 (3)
PSSpecifiedStencilRefSupported : 1
TypedUAVLoadAdditionalFormats : 1
ROVsSupported : 0
ConservativeRasterizationTier : D3D12_CONSERVATIVE_RASTERIZATION_TIER_NOT_SUPPORTED (0)
StandardSwizzle64KBSupported : 0
CrossNodeSharingTier : D3D12_CROSS_NODE_SHARING_TIER_NOT_SUPPORTED (0)
CrossAdapterRowMajorTextureSupported : 0
VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation : 1
ResourceHeapTier : D3D12_RESOURCE_HEAP_TIER_2 (2)
MaxGPUVirtualAddressBitsPerResource : 40
MaxGPUVirtualAddressBitsPerProcess : 40
Adapter Node 0:     TileBasedRenderer: 0, UMA: 0, CacheCoherentUMA: 0, IsolatedMMU: 1
HighestShaderModel : D3D12_SHADER_MODEL_5_1 (0x0051)
WaveOps : 1
WaveLaneCountMin : 64
WaveLaneCountMax : 64
TotalLaneCount : 2048
ExpandedComputeResourceStates : 1
Int64ShaderOps : 1
RootSignature.HighestVersion : D3D_ROOT_SIGNATURE_VERSION_1_1 (2)
DepthBoundsTestSupported : 1
ProgrammableSamplePositionsTier : D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_2 (2)
ShaderCache.SupportFlags : D3D12_SHADER_CACHE_SUPPORT_SINGLE_PSO | LIBRARY (3)

Still no FP16 min. precision support.

I need to test on GCN1 too..
 
Back
Top