Jump to content
  • Advertisement
Sign in to follow this  
stopiccot

Updating big textures in Multi-GPU configurations

This topic is 2504 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


Hi, everyone. In our project we are implementing clipmap technology for terrain rendering. We are using DirectX. Typical clipmap stack is implemented using Texture2DArray. For example 10 slices of 2048x2048 textures. For updating clipmap contents we are using intermediate texture created with D3D11_USAGE_DYNAMIC and D3D11_CPU_ACCESS_WRITE flags. We lock this texture by calling Map() with D3D11_MAP_WRITE_DISCARD flag. Copy data and then call Unmap(). After this we copy data on GPU from intermediate texture to clipmap texture array using CopySubresourceRegion().


All this works quite fine on one-gpu configurations but there are noticeable lags when running on dual-gpu Radeon 6990. All multi-gpu programming guides recommend to eliminate interframe dependencies. For render targets it is highly recommended to clear them each frame but we can't something like this for texture. I suspect that problem is that after update of tiny intermediate texture and copying data to clipmap texture array on next frame second GPU copies whole modified texture array which is much bigger. Am I correct with this assumption? So my question is if there are any way not to copy whole texture array but instead do such update for second gpu. Something like say to driver not to synchronize texture array between gpus and do it manually for each gpu. Or any other way to get good smooth FPS on multigpu system. It would be really nice to get help from some experienced guy who really knows how all this crossfire-and-SLI-stuff works behind scenes and could pinpoint source of the problem.


I'm really stuck with this problem.


Thanks for help!

Share this post


Link to post
Share on other sites
Advertisement
Unfortunately everything with SLI/Crossfire happens at the driver level, and D3D doesn't provide any means of interfacing with it. Nvidia's proprietary API might have something (the version that requires an NDA), but I couldn't tell you for sure.

The official advice from the IHV's with regard to dynamic textures was always fill a STAGING texture first, and then copy from that to the GPU texture. That sounds awfully similar to what you're doing, so I would imagine it wouldn't give you any different results. But it's probably worth a shot, if you don't have any better ideas.

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!