Jump to content
  • Advertisement
Sign in to follow this  
Mr_Fox

What may cause WarpDevice result different from HardwareDevice?

This topic is 693 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hey Guys,

 

I recently bothered by a strange bug in my program. After trying a lot of different thing I decide to give the warp device a try.

 

But once I run under warp device, I noticed the result I get is different than HWdevice (one particular series passes' result is unexpected, that pass series has lots of atomic ops on same buf from different passes though). Since it's my first time using WarpDevice, I wish to know what's the guidance on debug on warp device, and what are possible reasons for warp device result different than hwdevice.

 

Also should we expect warp device result 100% the same as HWdevice to be 'dx bug' free?

 

Thanks

Edited by Mr_Fox

Share this post


Link to post
Share on other sites
Advertisement

Hardware drivers are not bug free. Furthermore, some aspects of the D3D interface specifications are somewhat ambiguous, causing each hardware vendor to assume different design intents in some functionality.

 

The WARP device should be regarded as reference, as it is written by essentially the same guys who spec the interfaces. HW vendors also use it as the reference, but testing cannot cover all possible real-world use cases.

Share this post


Link to post
Share on other sites

WARP has taken on the role of the reference device now, so by default you should assume that it's behaviour is correct and the HW drivers are buggy... or your app contains undefined behaviour.

 

I'd start by adding extra resource transitions everywhere... e.g. put a UAV barrier right after every dispatch call for every resource that was used.

Share this post


Link to post
Share on other sites

it's also possible WARP might have bugs in some situations, first thing to check is it runs clean through the SDK layers. If you can get a small repro of the problem, you can send it to me and I can see what WARP is doing. andyg at microsoft.com.

 

Thanks,

 

Andy

Share this post


Link to post
Share on other sites

The warp is not a reference driver anymore but is close enough to trust it on behavior more than regular hardware driver.

 

It is also for sure not free of bug ( i have a bug pending at Microsoft for it actually ). The biggest difference with a real GPU is of course timing, when you lack a barrier and other sync primitive, bugs can trigger on not just because of timing difference. It is also true for GPU, GPU with debug layer, GPU with another app running a little GPU on the side, etc.

Share this post


Link to post
Share on other sites

Thanks guys for all your replies.

 

I find out that the bug will disappear if I remove one spit barrier (which I couldn't understand, and the bug will also disappear if I break the cmdlist and submit right away see the last part of this post). But WarpDevice is working properly and produce correct result in all these cases. So does that means this bug is not my fault?  I have already spent way too much time on it, and find 2 workaround (but still don't know what exactly cause that bug....)

 

I always fear that if I don't understand what exactly cause this bug and go with the workaround, it will eventually bite me worse in the future. So any suggestions for what I should do? Keep tracing the bug to death? or assuming the bug is not my fault (WarpDevice agreed with it, and work around also doesn't make sense but works...) and moving forward?  

 

 

P.S. Later I will post a repo with instructions and descriptions about my 'bad luck',  It will be super appreciated if you could give it a look, and give me some words about that

 

Thanks in advance.

Share this post


Link to post
Share on other sites

If you can get a small repro of the problem, you can send it to me and I can see what WARP is doing. andyg at microsoft.com.

Thanks AndyGiaister,  I have tried my best to make a small repo, and posted on this new post along with some descriptions. Please let me know if you have any trouble compile it.  Thanks for being willing to help

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!