Direct3D feature levels discussion

From a hardware perspective I never thought it made much sense that UAV read/writes should only be possible in the pixel shader. It all executes on the same compute units.

But obviously there must have been a reason from at least one IHV to not allow it. My guess would be Intel.
 
It would be interesting to know if the NDA version of NVAPI exposes UAV capabilities for D3D11.x API family. What is for sure is that Geforce do not support TIR before Maxwell 2.0. If it was a "political" choice or an API design/implementation issue to not expose UAV caps on D3D11.x only Microsoft knows :D

From a hardware perspective I never thought it made much sense that UAV read/writes should only be possible in the pixel shader. It all executes on the same compute units.

But obviously there must have been a reason from at least one IHV to not allow it. My guess would be Intel.
Please, tell me moar D:
 
Unrelated to this specific feature, but there are restrictions in Tier 1/Tier 2 that do not correspond to anything from hardware that I know of from the "main three" desktop GPU vendors. Speculate away :)

I could be wrong/forgetting some obscure hardware of course, but that's less fun to talk about. :)

But obviously there must have been a reason from at least one IHV to not allow it. My guess would be Intel.
Why would you think it was Intel? Check the hardware docs - IIRC there are basically no restrictions around UAVs really - the write path for UAVs (data port) is quite separate from the ROP path so there's no esoteric restrictions on shader stages or counts, etc. Our current restrictions are more related to format conversions (i.e. typed UAVs) in that path since - as noted - it is separate from the ROP hardware.

GCN obviously doesn't have any issues here either, so my guess is NVIDIA on most UAV count/stage-related restrictions.

In any case there are non-hardware reasons for not having UAV accesses at other stages, namely it starts to expose implementation-specific side effects (ex. post transform vertex cache) and in the presence of that, there haven't been any "killer applications" for UAVs at other stages, other than debuggers which could already do it at all stages via driver paths IIRC. It's possible that they simply didn't expose it for API cost/benefit reasons.
 
Last edited:
Yes, actually they are not in the consumer market.. But I can guess they are at least interested to DX12 too, at least ARM (and don't forget about VIA, it is still not dead xD ). Plus, there is still a Windows NT family for embedded and industrial systems running both ARM and x86..
It would be interesting to know what is Qualcomm doing. Actually it does not have any DX12 capable system on the market as far I know, moreover they have a VLIW architecture inherited from the ex-ATI/AMD mobile division, and I don't even know if Adreno supports virtual memory...
 
Yes, actually they are not in the consumer market.. But I can guess they are at least interested to DX12 too, at least ARM (and don't forget about VIA, it is still not dead xD ). Plus, there is still a Windows NT family for embedded and industrial systems running both ARM and x86..
It would be interesting to know what is Qualcomm doing. Actually it does not have any DX12 capable system on the market as far I know, moreover they have a VLIW architecture inherited from the ex-ATI/AMD mobile division, and I don't even know if Adreno supports virtual memory...
Adreno 400 probably isn't DX12 capable. But Adreno 500 certainly will be.
 
At least for the moment they aren't in any Windows devices. The only Windows ARM devices have been NVIDIA and Qualcomm powered, hence Qualcomm as the fourth Musketeer.
Intel GMA 500, 600, 3600 and 3650 were PowerVR based and were used with x86 ATOM CPUs. Desktop Windows (and desktop DirectX) was used with these.
 
Last edited:
There are four lights vendors.

Since when Qualcomm is a desktop GPU vendor? Despite being a "partner" in the Direct3D 12 announcement, they didn't announce any Direct3D 12 compatible product for the mobile even though a full year has passed, and their current products don't seem to support Direct3D 12 on Windows 10 Mobile. Other mobile GPU vendors did not announce any support for Direct3D 12 either. So right now "there are only three of them" in terms of Direct3D 12 support.
 
Last edited:
obviously there must have been a reason from at least one IHV to not allow it
Again, using UAVs across pipeline stages other than PS/CS is not allowed in Direct3D 11.1 on hardware with only 8 UAV "slots", but it's seems perfectly possible on the same hardware in Direct3D 12.

So it's just Microsoft defining these two features - 64 "slots" and UAV slots shared across all pipeline stages - as mandatory on feature level 11_1 only, and not bothering to bring them downlevel as optional features on level 11_0.

https://msdn.microsoft.com/en-us/li...v=vs.85).aspx#support_a_larger_number_of_uavs
https://msdn.microsoft.com/en-us/li...=vs.85).aspx#use_uavs_at_every_pipeline_stage

My guess would be Intel.
No. If you look up Direct3D 12 GPUs that were officially supported at the time of Windows 10 beta and correspond to resource binding Tier 1, Tier 2 and Tier 3, that would be Haswell/Broadwell, Kepler/Maxwell, and GCN.

there haven't been any "killer applications" for UAVs at other stages... It's possible that they simply didn't expose it for API cost/benefit reasons.

Maybe so, however Nvidia's PR was not being clear enough on UAV support - in Direct3D 11, Kepler/Maxwell do support UAV sharing across PS and CS stages, since it's a baseline feature of Direct3D 11.0 and feature level 11_0.

https://msdn.microsoft.com/en-us/library/windows/desktop/ff476900(v=vs.85).aspx#Views
https://msdn.microsoft.com/en-us/library/windows/desktop/ff476335(v=vs.85).aspx

And judging by Direct3D 12 capabilities, they probably also support the additional stages (VS/GS/DS/HS) and increased UAV slot count, but cannot expose these features in Direct3D 11.x since they miss other minor requirements for Direct3D 11.1 feature level 11_1.
 
Since when Qualcomm is a desktop GPU vendor? Despite being a "partner" in the Direct3D 12 announcement, they didn't announce any Direct3D 12 compatible product for the mobile even though a full year has passed, and their current products don't seem to support Direct3D 12 on Windows 10 Mobile. Other mobile GPU vendors did not announce any support for Direct3D 12 either. So right now "there are only three of them" in terms of Direct3D 12 support.

Adreno 4xx is 11_1 and qualcomm is used in all windows phones. Guess what the next windows phone will have (with D3D12 support too I bet)?
 
Since when Qualcomm is a desktop GPU vendor? Despite being a "partner" in the Direct3D 12 announcement, they didn't announce any Direct3D 12 compatible product for the mobile even though a full year has passed, and their current products don't seem to support Direct3D 12 on Windows 10 Mobile. Other mobile GPU vendors did not announce any support for Direct3D 12 either. So right now "there are only three of them" in terms of Direct3D 12 support.
They're not a desktop GPU vendor of course. The only point I'm making is that they are important enough to MS that they got a seat at the big kids table, as it were. So there may be a quirk or two in DirectX 12 and its feature levels that are designed to accommodate Qualcomm.
 
Adreno 4xx is 11_1 and qualcomm is used in all windows phones. Guess what the next windows phone will have (with D3D12 support too I bet)?
Are we sure that Adreno 400 Series supports tiled resources and virtual memory? Anyway, WP10 is expected AFTER Windows 10 for PC RTM, so some modification can still occur for mobile hardware (maybe some less hardware and shader features to reduce mobile GPU complexity and power requirements).
 
there may be a quirk or two in DirectX 12 and its feature levels that are designed to accommodate Qualcomm
It's hard to tell what was the original plan - did they plan to support existing 9_x/11_x mobile hardware with the WDDM 2.0 GPMMU model, or just introduce a new mobile GPU generation by 2016? For now, Direct3D 12 exists on the desktop only.

Are we sure that Adreno 400 Series supports tiled resources and virtual memory?
Adreno 400 series have to support virtual memory because they do not have their own dedicated VRAM.

Adreno 4xx is 11_1 and qualcomm is used in all windows phones. Guess what the next windows phone will have (with D3D12 support too I bet)?
I just don't know, the launch of Windows 10 Mobile is only two months away and the outlook is not any clearer than it was five months ago - more than that, any talk about Direct3D 12 on the mobile has simply stopped.
 
Are we sure that Adreno 400 Series supports tiled resources and virtual memory? Anyway, WP10 is expected AFTER Windows 10 for PC RTM, so some modification can still occur for mobile hardware (maybe some less hardware and shader features to reduce mobile GPU complexity and power requirements).

Well they claim to support "feature level 11_2" which I assume their marketing got confused and meant 11_1 with tiled resources (http://www.anandtech.com/show/8035/qualcomm-snapdragon-805-performance-preview). Perhaps Ryan could get some verification from qualcomm/ms whether or not they foresee adreno 4xx having DX12 drivers.

DmitryKo said:
I just don't know, the launch of Windows 10 Mobile is only two months away and the outlook is not any clearer than it was five months ago - more than that, any talk about Direct3D 12 on the mobile has simply stopped.

I'd be shocked if WP10 didn't have DX12 sooner rather than later (tbh I'd be a little shocked if it wasn't at launch). Although my personal experience with qualcomm and drivers have not been good so who knows.
 
It's hard to tell what was the original plan - did they plan to support existing 9_x/11_x mobile hardware with the WDDM 2.0 GPMMU model, or just introduce a new mobile GPU generation by 2016? For now, Direct3D 12 exists on the desktop only.
It would have been a stupid move not to involve all the GPU manufacturers for the API design from the beginning. Mobile is more important than desktop nowadays. It doesn't matter that only a few mobile companies have DX12 mobile GPUs in the retail market right now, since DX12 itself is not even out yet. New generation of mobile GPUs will be released for the holiday season market flagship phones. And I am sure that the mobile GPU vendors have already started the hardware design of their next generation as well. It would benefit Microsoft to ensure that as many as possible support DX12.
Adreno 400 series have to support virtual memory because they do not have their own dedicated VRAM.
It's not a hard requirement. For example last gen consoles had unified memory systems, with CPU virtual memory only. GPUs used pure physical memory adresses.
 
Well they claim to support "feature level 11_2" which I assume their marketing got confused and meant 11_1 with tiled resources
I wouldn't really read too much into this slide and assume some "hidden" functionality beyond what is explicitly claimed by Qualcomm, leave some room for human mistakes.

It could happen like this. Qualcomm PR just asked the hardware designers if Adreno 400 series support DirectX 11.2 (i.e. Direct3D 11.2 runtime in Windows 8.1), and they said they do - simply because Direct3D 11.2 supports anything from WDDM 1.0 (FL 9_3 to 10.1) to WDDM 1.1/1.2 (FL 11_0 and 11_1) to WDDM 1.3 (FL 11_1 with more options).
Then someone thought it would be "cool" to also include the supported feature level, but made a wrong assumption that Direct3D 11.2 comes with a new feature level 11_2 - because naturally every prior revision of Direct3D did come with a new feature level.


I'd be shocked if WP10 didn't have DX12 sooner rather than later (tbh I'd be a little shocked if it wasn't at launch). Although my personal experience with qualcomm and drivers have not been good so who knows.
Currently it rather looks like "later" for Windows 10 Mobile, and probably "much later" than the assumed Holiday 2015 availability for the desktop.
 
Last edited:
Back
Top