• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.
Sign in to follow this  
Followers 0

Fullscreen Direct3D 11 multi device (gpu), multi swap chain per device rendering

5 posts in this topic

In my application I seem unable to achieve more than one device (GPU) in fullscreen at the same time. After much testing and googling I still remain puzzled. Windowed mode is not an option for me, and multi device is essential. Using Windows 8.
I can get multiple swap chains on a single device to go fullscreen at the same time, but as soon as more than one device is going fullscreen, a maximum of one device remains in fullscreen mode.
I also found this blog stating the problem:
Is it possible to achieve fullscreen rendering on multiple devices using DirectX 11 on Windows 8? If yes, how would that be achieved? If not, what's the rationale behind it?
Found this post stating that DXGI 1.1 has issues with multi device fullscreen rendering, however I have not found information about DXGI 1.2 or 1.3 and if this issue has been fixed.
Looking for solutions for DirectX 11, I found a webpage stating that DirectX 9 could be used in fullscreen mode on multiple devices if some restrictions are met:
"... The practical implication is that a multiple monitor application can place several devices in full-screen mode, but only if all these devices are for different adapters, were created by the same Direct3D9 object, and all share the same focus window..."
Are there similar restrictions as with DX9 for DX11 on Windows 8 and how could they be met?
If fullscreen rendering on multiple devices is not possible using DirectX 11 (for some reason I would like to know), could it be possible to interop between DX9 and DX11 to get it working? 
I also read in a blog that Windows Vista might work with multiple fullscreen devices since it uses DXGI 1.0. Could this be correct? 
I would really appreciate some comments on this issue.
Best regards,
Jørn Skaarud Karlsen

Share this post

Link to post
Share on other sites

Fake it with fullscreen borderless windows.

From your links it seems to have been this way for a few years so I doubt it will work again soon.


Vista does work, I remember the DX multimonitor sample working correctly back then.

Edited by Erik Rufelt

Share this post

Link to post
Share on other sites
One way you can handle is to called ChangeDisplayModeSettingEx to change the monitor screen resolution. Then create a bordeless window that is the same size that you have you display setting set to. This will simulate exactly what directx does when you go fullscreen. At my job we have to handle 4 monitors in full screen and that is how i did it.

Share this post

Link to post
Share on other sites

Hi guys, thank you for the info!


A long story short, I am working with a special display that requires properly vsync'ed images running at 184Hz per output, and to achieve good update speed I need to use up to 8 outputs to feed information to the display. Using windowed mode I have not been able to achieve properly vsync'ed images at 184Hz using multiple outputs. The display is very sensitive to vsync, and fullscreen seems to work, but not windowed mode.


As I see it, my options are:
1) Get properly vsync'ed and refresh rate synchronized images from windowed mode - which I have not been able to achieve as of this moment.
2) Try using DX11 DX9 interop since DX9 might (?) be able to achieve fullscreen mode on several GPUs.
3) Go back to Windows Vista - not really a solution since it is not future proof.
4) Try using GPUs in SLI - this is a suboptimal solution since modern graphics cards only support 4 outputs where I would like to use all 8 inputs on the 3D display, and it would involve moving data between GPUs at high refresh rates - reducing performance.
5) Use more computers with one GPU in each (very much not an ideal solution).
If you know how to get 1) working, that would be highly appreciated since the ideal solution of fullscreen mode does not seem to be achieveable (windowed mode used to work with Windows XP, so it has been achieved with an older version, but have not been able to get it working properly with Windows 7/8 maybe due to dwm or other reasons).
Number 2) is also an option if it works. I would consider this a valid solution to my problem - though it is a hack.
Any last comments on this issue?

Share this post

Link to post
Share on other sites

Try calling Flush() before Presenting. Also try using SetMaximumFrameLatency and check the other available flags for swap chains and devices. It is difficult to get proper vsync in window mode, and I believe part of the reason is because frame buffering is disabled, though desktop composition could be a worse factor.

Also try using one device per graphics card but multiple swap-chains, or the other way around.


2) can probably work, should be fairly easy to test DX9 and if it works render to a shared texture in DX11. I know OpenGL can have multiple fullscreen windows (on a single graphics card with multiple monitor outputs).



Actually this might just be a case of bad docs.. I didn't run any proper tests, but based on the focus-window docs for DX9Ex I ran a quick experiment with MakeWindowAssociation on the DXGI factory and it seems there can be two different fullscreen windows simultaneously.


Share this post

Link to post
Share on other sites

This is a bit of a long shot, but you might be able to get option 1 working in windows 8 (and possibly not 8.1). It depends on a couple of things:

1. Is the problem with windowed mode that your application image is tearing, that is, not actually vsync'd?
2. At the same time the desktop itself is vsync'd fine, say if you drag a file explorer window around it displays normally without vsync problems?

If that is the case, the windowed mode problem may be caused by your application backbuffer presents being out of sync with the DWM presentation to the display. By default a windowed app backbuffer is blitted to the DWM surface (see: http://msdn.microsoft.com/en-us/library/windows/hardware/ff557525(v=vs.85).aspx ) and that blit isn't perfectly sync'd to the desktop's output to the display.

With DXGI 1.2 in windows 8 they added a newer backbuffer presentation mode, the flip mode, that shares the application backbuffer with DWM, rather than copy (blit) the backbuffer to DWM. You can find information on how to use it here - http://msdn.microsoft.com/en-us/library/windows/desktop/hh706346(v=vs.85).aspx .

Essentially you have to:

- Create a DXGI 1.2 factory.

- Create the device and swapchain seperately rather than with a single function (use D3D11CreateDevice() and factory->CreateSwapChainForHwnd() with a newer DXGI_SWAP_CHAIN_DESC1 struct).

- Use a minimum of 2 buffers in the swapchain desc, along with SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL.

- Don't use an MSAA backbuffer surface directly (if you need MSAA use a seperate render target for the resolve).

- Don't use more than one flip mode swapchain per hwnd.

That last requirement might be a problem for you, assuming you're currently using a single window and splitting it's client area amongst the many swapchains. I'd assume you could get around this by giving each swapchain it's own hwnd, then setting each window to maximised the size of it's swapchain's display area, and borderless. Basically tiling multiple borderless hwnd's to create the same appearance as a single large maximised borderless window.

Flip mode should solve any windowed vsync presentation issues, but DWM might still cause an issue by itself not refreshing at the full display rate (i.e. the desktop surface only refreshing every second frame or 92Hz). It might not be a problem in the first place, but if it is, apparently you can override the DWM refresh rate with a function called DwmSetPresentParameters ( http://msdn.microsoft.com/en-us/library/windows/desktop/aa969523(v=vs.85).aspx )

That function is only available in windows 8 and not windows 8.1, so depending whether you need to use it or not, limits your choice of those two OS's that support the flip mode backbuffer presentation method.

Edited by backstep

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  
Followers 0

  • Similar Content

    • By lonewolff
      Hi Guys,
      I am just wondering if it is possible to acquire the address of the backbuffer if an API (based on DX11) only exposes the 'device' and 'context' pointers?
      Any advice would be greatly appreciated
    • By MarcusAseth
      bool InitDirect3D::Init() { if (!D3DApp::Init()) { return false; } //Additional Initialization //Disable Alt+Enter Fullscreen Toggle shortkey IDXGIFactory* factory; CreateDXGIFactory(__uuidof(IDXGIFactory), reinterpret_cast<void**>(&factory)); factory->MakeWindowAssociation(mhWindow, DXGI_MWA_NO_WINDOW_CHANGES); factory->Release(); return true; }  
      As stated on the title and displayed on the code above, regardless of it Alt+Enter still takes effect...
      I recall something from the book during the swapChain creation, where in order to create it one has to use the same factory used to create the ID3D11Device, therefore I tested and indeed using that same factory indeed it work.
      How is that one particular factory related to my window and how come the MakeWindowAssociation won't take effect with a newly created factory?
      Also what's even the point of being able to create this Factories if they won't work,?(except from that one associated with the ID3D11Device) 
    • By ProfL
      Can anyone recommend a wrapper for Direct3D 11 that is similarly simple to use as SFML? I don't need all the image formats etc. BUT I want a simple way to open a window, allocate a texture, buffer, shader.
    • By lucky6969b
      Since there is no more fixed pipeline rendering in DX11, for every part of rendering in DX11, do I need to create a brand-new vertex shader and pixel shader... or at least I have to find one relevant online. If you work on skinned meshes and other effects originally worked in DX9 fixed pipeline, do I have to rework everything by now?
      For assimp, if it originally was designed for DX9, like it is coupled to a DX9 device for creating meshes and materials etc. Do I have to add in the DX11 device in the assimp, or can I just leave the assimp to remain in DX9 and after the meshes are loaded, I just convert the vertex buffers and index buffers into DX11 buffers?
    • By MarcusAseth
      This header is mentioned in the book I'm reading but there is no documentation on msdn... Is it like an... outdated and abandoned header?
      If so, what's the current default/recomended library for handling errors with directX?
  • Popular Now