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
Add support for D3D11.4 and DXGI1.6 #864
Comments
Ah I think the problem is maybe this GUID: Similarly these GUIDs: I'm not sure how hard it will be to add support for these new interfaces, I'll check. In the meantime if you don't need to use the newest DXGI/D3D interfaces could you test as a workaround only using DXGI 1.5 / D3D11.3 (or lower than that if you don't need any features from those new versions) ? |
Since, I switched from Windows 8.1 to Windows 10, I indeed use:
I do not know by hard if I use new features of these interfaces not present in the previous versions, but the main reason I did this is to use the latest overriden version of a member method, since nearly all member methods of for example I will check the version that still used Windows 8.1. |
I don't think that's how the COM implementation works. You won't pay any cost for calling i.e. in a newer D3D runtime the same object will implement MSDN mentions new versions only making additions because if each interface isn't a strict superset of the last one and you changed functions that were in older interfaces, then you could no longer access |
Thanks for the explanation. But since msdn mentions that ID3D11DeviceContextN inherits from ID3D11DeviceContextN-1, etc. I thought, the internal implementation of the D3D runtime could have been changed and optimized between versions by reimplementing the object. (I will consider using a typedef to use the minimal required interface.) My latest Windows 8.1 version which uses older interfaces runs fine :) |
I'm glad you got it working then! If you don't mind I'll rename this bug to clarify that it's about D3D11.4 and DXGI 1.6 support, and tag it appropriately. This won't be in scope for the v1.0 release coming up, but I will look at it after that point. My understanding is that the inherited interfaces are just implemented the same way as would inherit virtual classes in C++. There's a single vtable for all of the interfaces, and the new functions in later interfaces are just added on as extra elements at the end. So while I'm sure you are right that the D3D runtime will be changed and optimized between versions, you will always have the latest runtime version no matter which interface you access through. For example you could have an implementation If you then run on windows 10 and you get an implementation This is the same as if you have your own virtual class - the vtable guarantees that the virtual function calls go to whichever implementation is actually used by the underlying object, so don't have to down-cast a base pointer you have to get the most derived implementation. This isn't necessarily guaranteed, but it would be very counter-productive for D3D to implement it any other way. You can also check this by comparing the pointer you get for ID3D11DeviceContextN vs N-1 or anything - you'll find that it's the same (perhaps plus or minus a few bytes), meaning that it still points to the same vtable. You can even inspect the vtable itself and find that the function pointers are identical. |
No problem.
Oh, I had completely forgotten the header<>source separation. Indeed, no matter which header to whatever version of an interface you include, the linked D3D library will be the same. And even if new headers to newer interfaces are added, and old implementations gets optimized, you still link against the most recent (and only) D3D library on your system containing these optimizations. |
* This is just a pass-through implementation as fences do not have to be serialised.
This ended up being mostly just a pass-through implementation as nothing ended up needing serialisation. |
Problem:
Setup:
Steps to reproduce with RenderDoc:
renderdocui.exe
File > Capture Log
FPS.exe
Launch
buttonDiagnostic Log File:
The text was updated successfully, but these errors were encountered: