The blind leading the blind, anyone...?
Do you know what an API is? It's easy for non-programmers to confuse an application programming interface concept with implementations of that interface.
API:
- https://learn.microsoft.com/en-us/windows/win32/api/dxgi1_2/nn-dxgi1_2-idxgiadapter2
- https://learn.microsoft.com/en-us/windows/win32/api/d3d11_1/nn-d3d11_1-id3d11device1
KB2670838's versions of dxgi.dll, d3d11.dll, and co provide this API. The associated symbols and structures of this API exist on Windows 7. They are exported. They are callable. No access violations.
Try arguing that this application programming interface does not exist on 7 to the programs which interface with it on 7.
As I already explained, it was provided on 7 to simplify code for applications that expected Windows Store distribution but wanted to maintain less separate logic for d3d devices on 7 vs 8.
The differing implementation of the API on 7 vs 8 doesn't magically invalidate the fact that this API exists on both platforms. That's why we have a difference between interface and implementations. Upgrade's implementation has the shiny new features. Downlevel's implementation might be full of ERROR_UNSUPPORTED query results.
Interface ≠ implementation.
Here, you can educate yourself regarding the topic.
- Step 1: Any introduction to C book will do. Or, since you fancy yourself a programmer, you can jump to this book that Google found regarding interfaces and implementations: http://www.r-5.org/files/books/computers/languages/c/mod/David_R_Hanson-C_Interfaces_and_Implementations-EN.pdf
- Step 2: Refer to msdn: https://learn.microsoft.com/en-us/windows/win32/api/dxgi1_2/
Accurate documentation with precise explanations. You can write a sample program to observe how these things work, if you don't believe the literature. Here's a springboard for you: https://walbourn.github.io/anatomy-of-direct3d-11-create-device/ from legendary DirectX team member Chuck Walbourn.
Do you know what a feature level is? Microsoft terminology is admittedly a little muddy regarding this, but it becomes apparent while working on these kind of programs.
https://learn.microsoft.com/en-us/windows/win32/direct3d11/overviews-direct3d-11-devices-downlevel-intro
I was talking D3D11 feature levels, not 12, so let's use this link about D3D11 Feature Levels, not your link about D3D12 Hardware Feature Levels. These are different things.
If you can't figure it out, here are precise and simple explanations for you:
- Windows implements Feature Levels. The D3D11.1 API (remember what an "API" is?) is the interface between your application and the abilities of the Feature Level you want. A lack of the Feature Level you want does not magically mean the API has ceased to exist.
- Graphics drivers implement Hardware Feature Levels and advertise their compatibility with them. When your application uses the D3D11.1 API to request an ability of the 11_1 feature level from Windows, Windows in turn must request that ability from the graphics device driver, which in turn can only offer that ability if the graphics device hardware is capable of it and the graphics driver is programmed to drive said ability. Feature Level ≠ Hardware Feature Level.
Mono knows there is no 11_1 feature level on 7 and does not bother trying to acquire an ID3D11Device1.
Again, you have entirely failed to understand why KB2670838 was created and why it does what it does. Microsoft policy required all Microsoft Store programs to use the D3D11.1 API when using the machine's graphics device. There was (and still is) absolutely zero need for Mono to become compatible with distribution on the Microsoft Store.
KB2670838 was a simple standardization effort to reduce manhours of programmer labor and conform to manufacturing requirements. It happens all the time.
KB2670838 was never about blessing Windows 7 users with the shiny new Windows 8 features. That would reduce Windows 8 sales. It was about saving costs.
Just like how the similar D3D11 platform update for Vista was never about enabling Vista users to play D3D11 games. It was about reducing manhours of programmer labor in the Internet Explorer team to enable a single codebase from which IE 9, 10, and 11 could all be built as efficiently as possibly. Vista needed to be uplifted to the D3D11 common denominator of that unified code base to enable its continued contractual servicing.
These are just ABCs of standard software development.
APIs provide stability and insurance against time and varying implementations. Your program talks to Windows API to get an implementation. Windows talks to the graphics driver API to get an implementation. The graphics driver talks to the hardware to get a result.
Just because one of these links in the chain doesn't exist and you don't like that (11_1 feature level), does not magically mean that the rest of it doesn't exist either (D3D11.1 API).
Someone somewhere once said, "if you aren't a programmer, don't blah blah..."
...especially if you are going to be arrogant, rude, & condescending about something you don't know. And hijack a random person's thread, no less! I created this thread to try to find a solution to a problem I'm facing. You get the satisfaction of derailing my attempt to find a solution, and I get the fun chore of having to clean up the dump you took in this thread.
Ironic.
This was the thread you followed me from, btw. Shame on me for making a post in that thread. It was only my fourth post on MSFN and within 48 hours I ended up on the radar of two trolls itching for a fight. I thought MSFN was better than that.