ID:2083041
 
Resolved
Dream Seeker will now seek out AMD and Nvidia cards first, and Intel cards last, when choosing a display adapter.
BYOND Version:510.1341
Operating System:Windows 7 Ultimate 64-bit
Web Browser:Chrome 50.0.2661.94
Applies to:Dream Seeker
Status: Resolved (510.1342)

This issue has been resolved.
Descriptive Problem Summary:

When Dreamseeker queries its graphics devices, it is grabbing only the first item in the device list. If multiple graphics devices are active, it does no querying to see which device is preferred.

This is a problem because i5 and i7 processors are quickly becoming the gaming standard and they all ship with built-in Intel graphics adapters, which can't run even the simplest BYOND games at more than a handful of FPS and often can't support hardware mode and many shader features that have become standard on GPUs in the last decade.

If a user has two graphics devices installed, and the Intel device is not disabled (windows machines come out of stores pre-built with both the Intel and the Nvidia card's drivers installed and active), BYOND will ALWAYS choose the first device. Pre-built machines will almost always have the intel device drivers installed first and then the GPU's drivers will be installed second.

In every case that the user has an NVIDIA or Radeon GPU installed as well as an Intel graphics driver, it will always be preferrable to run on the NVIDIA or Radeon GPU. Even if the NVIDIA or Radeon GPU is a decade old, it will run DreamSeeker in hardware mode more reliably than the shitty Intel graphics adapter that comes stock with i5/i7s.

This is leading to a lot of reports of BYOND games running slowly or having graphical artifacts. Tech savvy users also fall victim to this because mainstream games do not default to the first device they find. Users will ultimately be left confused and bewildered as to why a "shitty 2D game" can't run at 10fps on their machine while the same machine can manage to run modern AAA games at 60fps or more.

This is a problem. It's a major problem. And it's a problem that is only becoming more common as the Nvidia 9 chipset and the Intel I5/i7 chipset becomes the mainstream gaming build.
Dream Seeker does not enumerate display devices; it uses D3DADAPTER_DEFAULT in the device creation call. The problem appears to be that this sucks on some systems.

Do you have any reliable info on how to make a good choice via enumeration?
Do you have any reliable info on how to make a good choice via enumeration?

Just from looking at the API:

You are going to have to get the D3DADAPTER_IDENTIFIER9 of each device.

Any device with an Intel based driver should be given lowest priority. Nvidia and Radeon drivers should be given higher priority.


You could look at the capabilities of each.

Higher memory, or higher clock speed are your best bets for figuring out which one to use.

Most people seem to figure this out by looking at D3DCAPS9, the Setup API, or letting the user pick the device that they want the application to use. Unfortunately, that last one is not really an option with BYOND especially in standalone.

I don't know what device capabilities would be best to pick, so D3DCAPS9 would probably not be the best bet.


To get a better bead, you are going to have to pull that information from windows itself. Windows' SetupAPI seems to give you better information about the device in question than does DirectX.

https://msdn.microsoft.com/en-us/library/ff537737.aspx

I found some info very similar to your suggestion, so I think I'll go with that. Apparently the nVidia and AMD codes for VendorId are known, and so are Intel's, so I can use that.

This will go in the next release, although it has me wondering if I should now wait on finalizing 510. This change is big enough internally that I want to make sure it doesn't screw anyone over. Plus it'd be nice to get SS13 users' feedback on it.
Honestly, that's you.

If you wanna put out an all-call, I'd like to see what they have to say. You know my experience is mostly limited to DirectX3.0 (when I was first learning to program) and OpenGL 4.4/WebGl, so I'm sure a few of them have a better idea of how this is done than I. And I'm always willing to be the fly on the wall to learn new googlable phrases.
Lummox JR resolved issue with message:
Dream Seeker will now seek out AMD and Nvidia cards first, and Intel cards last, when choosing a display adapter.
Suck it, Intel.
This was all a master plan in ter's hatred of Intel.
I'm on to you
This explains the issues I was having with Lux on my home computer. It would lag greatly because my mobo has built in graphics (I think they're AMD built in though) and I'm using an Nvidia card. On my work computer, the game runs like butter, but at home, which has a much better card, things run super slow.

I'll try it out to see if it fixes the problem later on tonight.
Try 1343, because 1342 had a nasty image bug. If you use savefiles, I've got a fix incoming for overlay/underlay saves in 1344.