Hi-dpi Multi-mon with Surface Pro 3 – dpi-scaling tweaks

[Can’t decide what docking hardware to buy? Click for a comparison of many popular docking options]

Skip down to the bottom for a regkey workaround and a tutorial on how to setup your Surface Pro 3 for a seamless multi-mon experience.

Click here for Surface Pro 4 / Surface Book regkey

Update: Check out our demo video of this hack in action with the Vertical Surface dock:


Windows multi-monitor support has improved quite a bit over the years and provides a great productivity experience that is, frankly, superior to other operating systems on the market. The experience is excellent when using multiple monitors of the same type and pixel density (dpi). But what if you have an old low-dpi monitor and a new hi-dpi monitor and want to pair them together? Or what if you buy a new laptop or tablet like the Surface Pro 3 with a beautiful hi-dpi screen but want to use it with your old monitors? Sometimes it just doesn’t look right:

You might think that it would be easy to just make stuff a bit bigger on one screen and a bit smaller on the other screen to get them to match up. But behind the scenes its quite a bit more complex than that.

Windows Desktop scaling:

Portions of Windows rely on a set of bitmap graphical assets that are designed to-the-pixel to look awesome. What this means is that if the asset is 40×40 pixels and displayed at 100% scaling on screen, it takes up 40×40 pixels and looks exactly as the designer intended. Depending on the physical dpi of the screen, that 40×40 pixel bitmap might be 2 inches tall (84″ 1080p television) or 1/10″ tall (Google Nexus 5 1080p phone). To account for different physical screen dpi and typical viewing distances, Windows has the ability to scale the size of these bitmap assets. If you scale to 200%, that 40×40 image becomes 80×80. Many of the assets in Windows are stored at multiple scaling levels so that they do not need to be scaled on the fly. This saves processing time and allows the assets to be optimized for each scaling level exactly rather than relying on a generic anti-aliasing or interpolation scheme. For Desktop, these pre-set scaling levels, or plateaus are 100%, 125%, 150%, 200%, 250% etc. When using these scaling plateaus with monitors that have different dpi, Windows 8.1 can set one scaling level for one monitor and another scaling level for a different monitor so that the sizes match up as closely as possible. This setting is done behind the scenes and uses a formula that takes into account the physical screen size and physical dpi to get the best match. Windows 8.1 does not expose an interface to the user to choose different dpi scaling per monitor. (Windows 10 does but still has some limitations.) Most of the time, the automatic matching works great, but not always. Windows has the ability to set an arbitrary system-wide scaling factor as well such as 107% but this disables the ability to set independent scaling factors per monitor and the scaling is done on the fly which can have a minor impact on performance but potentially a major impact on visual quality for some applications. Other portions of Windows use vector graphics which are suited to scaling by their very nature and work well across all scaling schemes.

Microsoft Office and many 3rd-party applications are designed with dpi-scaling in mind and work well at the various pre-set dpi-scaling plateaus. Some 3rd-party apps and legacy Microsoft apps that are dpi-unaware don’t look very good when scaled. Sometimes certain UI elements or fonts look a little blurry because of the generic anti-aliasing/interpolation scheme being used. In other cases, certain portions of the UI may be scaled and other portions are not. MSDN has provided developer guidance on how to account for dpi-scaling since the Introduction of Windows Vista Beta in 2005. 9 years later, most applications are following this guidance pretty well, but some still fail miserably.

More on viewing distance vs physical dpi:

Typical laptop/tablet users have the screen placed about 20-25″ away from their eyes. Desktop monitors are typically pushed back to 30″ or so. That extra 5-10″ is a big difference and the visual system has a much harder time distinguishing individual pixels at that distance. Windows takes advantage of this fact and makes assumptions about the typical viewing distance based on the monitor size, then chooses a dpi-scaling factor based on the viewing distance and physical-dpi combined. The goal is to have on-screen UI look approximately the same size across a wide variety of use cases. There are some standard approaches for choosing the ideal screen viewing distance based upon the properties of the screen, content being displayed and the abilities of the average human visual system: https://en.wikipedia.org/wiki/Optimum_HDTV_viewing_distance#Human_visual_system_limitation The key takeaway is that the closer your eyes are to the screen, the more dpi matters. What this means in practical terms is that if the screen is too far away you may not be able to see any additional detail with fancy 4k monitors.

This approach breaks down when you pair a large monitor optimized for a 30″ viewing distance with a laptop optimized for 20″ viewing distance and the result is that objects on one screen look larger than than on the other. The results look even worse if the physical dpi of the two screens are vastly different as is the case with modern laptops vs regular 1080p monitors. So what can be done?

Choosing monitors:

We already know that Windows works really well for most applications when the default scaling plateaus like 150%, 200% are used. What if you have a monitor with 100dpi and another with 115dpi, what scaling factor should be chosen for optimal results? Using the default scaling plateaus, it will be impossible to get the sizes to match up exactly. For example, if you have both screens at 100%, then UI will appear 13% smaller on the 115dpi screen (100/115=87%). If you choose 100% on the 100dpi screen and 125% on the 115dpi screen, the sizes match up closer but there are potential side effects. For example depending on the application, dragging a window from one screen to the other will cause an artifact where the window size will change as you cross over to the other monitor and all the text will re-align to be optimized for the other monitor. Because applications may handle this differently (FireFox vs Internet Explorer is a good example) user perception is an overall inconsistent experience. Many people don’t mind, but it certainly isn’t ideal.

To avoid some of these issues, you can choose monitors that either have the same physical dpi, or choose monitors with a pixel density that maps to the scaling plateaus like 125% or 150% very closely. Also there are some tricks where you can change the screen resolution to something other than the native panel resolution (something that is usually discouraged for visual quality reasons) yet achieve better results than built-in dpi-scaling.

Case study: Surface Pro 3 multi-mon:

The Surface Pro 3 screen is wonderful with a 2160×1440 resolution in just 12″ (216dpi). Given all the info above, how would you choose a monitor to pair with it? The ideal monitor would have the exact same dpi. Unfortunately, there are few monitors on the market with ~216 dpi:

But what if we target half that dpi? It turns out that a few standard monitor sizes are about half the dpi and quite economical:

Ok so what? Half the dpi still doesn’t match. Well If we could set 100% scaling on the desktop monitor and 200% on the tablet screen that would be ideal. Unfortunately because of the assumptions Windows 8.1 makes about screen size and viewing distance, the SP3 screen is set at 150% instead, so it doesn’t match up.

But there is a simple workaround. We already know that the further away the screen is, the less dpi matters. If the SP3 screen is ~30″ away right next to your desktop monitors, why not avoid software dpi scaling altogether and let the GPU and panel take care of it? Instead of using the native 216dpi, you can drop that in half to 108dpi to match the external monitor. GPUs and panels are *really* good at scaling to even integer divisors of the native resolution and look quite crisp. With the SP3 oriented in portrait configuration and held by hand right next to a 21.5″ panel it matches almost exactly:

Unfortunately, the Surface Pro 3 does not let you set this resolution or other 3:2 aspect ratio resolutions by default. You can set some lower-resolution 16:9 aspect ratio resolutions but that will result in letterboxing or black bars on screen. So we need to tweak things around to get the proper resolutions. The same methods can be used for other premium laptops.

Regkey method:

  • backup your system (use at own risk – modifying the registry can have side effects and precautions such as backing up your data should be taken before modifying your PC
  • download the .reg file
  • double-click the .reg file and click OK to import it into your registry
    • Having trouble importing a .reg file when downloading via the MS Edge browser in Windows 10? That’s probably because it is auto-renaming to .txt for safety. You can rename it back to .reg or import the .txt file from within regedit.exe. Or just download with Internet Explorer or FireFox instead.
  • Reboot OR follow these steps to reset the Intel display driver
    • open Device Manager
    • open the Display Adapters
    • right-click “Intel HD Graphics…” GPU and click “disable”
    • click “Yes”
    • after the monitors stop flashing, right-click the Intel GPU again and click “enable”
  • open System – Display – Advanced display settings in control panel and choose your preferred resolution

Add custom resolution to Surface Pro 3 (manual method):

  1. disconnect all external monitors and set the Surface Pro 3 screen to default scaling settings of 150%, then log off and log on
  2. download the latest 64-bit .zip package for the Intel 4th gen Core graphics driver: https://downloadcenter.intel.com/search?keyword=Intel+HD+Graphics+4600
  3. unzip the driver and use the “Have Disk” method to force install over the default Surface Pro 3 driver:
    • start Device Manager
    • expand – “Display Adapters”
    • right-click on the Intel HD Graphics entry and select “Update Driver Software”
    • click “Browse my computer for driver software”
    • click “Let me pick from a list of device drivers on my computer”
    • click “Have Disk”
    • browse to the unzipped driver driver folder Graphicsigdlh64.inf or similar
    • click “Open” then “OK” then “Next”
  4. after the driver installation completes, reboot
  5. Right-click on the desktop and select “Graphics Properties”
    • click on the word “Display” in the upper-right-hand corner to reveal the drop down menu
    • select “Custom resolutions from the drop down menu
    • click yes to the warning message
    • add 1080×720, 60Hz, 32-bit color, 0% underscan and any other resolutions you wish
    • Close the custom resolution tool
  6. Reboot
  7. Connect all your desktop monitors and use the Display control panel to switch the Surface screen to the new 1080×720 landscape or 720×1080 portrait mode
    • On the start screen type in “adjust screen resolution” to open the Display control panel
    • Click on the representation of the Surface Pro 3 screen
    • Click the Resolution drop down box and select your newly added resolution, then click “apply”
    • Click on the representation of the external monitor and click the “make this my main display” checkbox and click “apply”
    • Move the representations of the two monitors around to your liking
    • Close the Control panel and enjoy!

Other thoughts:

Low res for desktop, full res for mobile – switch automatically without logoff/login!

A benefit of this approach is that Windows remembers all the different multi-monitor configurations (topologies) that have been used in the past. So even though 1080×720 is set when connected to your specific external monitors, once you unplug those monitors, the SP3 will go back to the native 2160×1440 mode with 150% scaling. So you don’t have to sacrifice the fantastic screen. You get hi-dpi when using the SP3 closer to your eyes in tablet/laptop mode, and low-dpi when using it further away where you can’t see the individual pixels anyway. Its the best of both worlds! And you don’t need to logoff/login to switch back and forth. Just dock and un-dock.

Modern apps in Win 8.1 – use 1152×768 instead:

When the Surface screen is in low-res docked mode at 1080×720, it is lower than the minimum resolution required to run a modern app (1024×768) and you’ll get a resolution error. You can work-around this by switching the start screen to the desktop monitor and by making the external screen your main display so that apps open on that monitor instead. If you only use desktop applications, this isn’t an issue. but you can also try setting one of the other 3:2 aspect ratio resolutions like 1152×768 to re-enable modern apps on the SP3 panel in docked mode.

Other settings to try:

You may want to experiment with different dpi-scaling settings in addition to the resolution settings. For example, I keep the “system dpi setting” at 150% which is the default. When the tablet is not docked, everything is scaled to 150%. When the tablet is docked, the tablet screen resolution drops and its scaling factor is set to 100% as is the external screen. But if you run dxdiag.exe in docked mode and click “save all info”, you’ll see the “system dpi setting” is still 150%. This way often works well but you may notice many Adobe applications look too big when run in docked mode because they are honoring the system dpi setting of 150% instead of the per-monitor dpi setting. That is the fault of the application, not the Surface or Windows. One workaround for these programs is to right-click on the .exe file, and on the compatibility tab under settings, ensure that “disable display scaling on high DPI settings” is checked. You may notice that if you keep programs open when docking and undocking, their on-screen size may change after the transition. If this bothers you, just close the app and re-start it. This gets better with the most recent Windows 10 update, but it is not entirely solved. In any case this is what works for me with Windows 8.1 and Windows 10 and I love my Surface Pro 3 even more with these simple tweaks.


Back to main blog: https://dancharblog.wordpress.com


67 thoughts on “Hi-dpi Multi-mon with Surface Pro 3 – dpi-scaling tweaks

  1. Alex, you'll have to go into more detail about your setup for me to help.
    What I do is set the external monitor as the "primary" monitor in display control panel. Goto Settings – System – Display and click on the representation of the external display. Then make sure that "make this my main display" is checked. Logoff and logon. Then setup the SP4 screen with the regkey to use a lower resolution to match your external monitors to eliminate the need for windows to do any on-the-fly scaling – 1080×720 works for me. Don't be scared by setting a low resolution on the SP4 – it really works and as soon as you undock, you'll be back in business with the full native resolution again.
    Depending on the applications being used, some blurring in certain situations is unavoidable, but this should make things look better for a lot of cases. Let me know how it works out for you.


  2. Danchar4, I dont really need SP4 display to function when I am docked (it's uncomfortable) so I disable it all the time. I work on 2 ultrawide 3440×1440 displays only instead. On native resolution my ultrawide optimal scaling is 150%, on SP4 is 200%. I make my first ultrawide as main display and as soon as I start SP4 docked – everything on ultrawides is super smooth, but soon as I undock – SP4 display turns on and everything is blurred on it. At the same time when I first start SP4 – everything is crisp on it, but when I dock after that – everything on my ultrawides is blurry… This is so disappointing, I had all SP models 1-2-3-4, hoping that this issue will be solved, but still havent. I somehow worked well on SP3 with ultrawides – setting both on 150% scaling on native resolution, but SP4 has higher DPI and now this is impossible to make SP4 display 150% – everything too small! I don't know what to do, this is so disappointing.
    Setting ANY resolution on SP4 lower than native makes everything blurry, even SP3's 2160x1440p.
    (i7 Iris 540, tried with stock drivers and new Intel website – same thing)


  3. Jan, try re-applying the regkey and rebooting. Sometimes when the windows updates install, they clean away the settings for the Intel GPU driver.


  4. After installing the latest surface updates, the registry file does not seem to work for me anymore, I lost the custom resolutions. Anybody else experiencing this issue?


  5. John and Jan, are you both on Win10 1511 update with an SP3?
    My machine right now is an SP3 back on Win8.1 for some testing and it has the Jan19 firmware; resolutions are working OK in this config. So I suspect its an issue specific to Win10 and the new Intel driver.
    I'll tinker with it this week and report back. If anybody else has a chance, please try installing the latest intel.com driver and trying the custom res tool.


  6. Yes, SP3 Windows 10 Version 1511 Build 10586.104. Tried applying the patch again, but no luck. I used 1440×960 all the time, but it is no longer there.


  7. In the meantime, I tried installing the latest Intel driver and adding the custom resolutions, and that still works. Would be convenient to have the registry file, though.


  8. Help us, Dan-Char Four. You're our only hope!
    (Well, not completely, but latest Intel drivers for SP3 seem to be months older than latest Microsoft drivers?)


  9. I just bought myself a 3840 x 2160 monitor for my SP3 on Windows 10. Works great at the native resolution, but I can only get a 30Hz refresh rate. I have heard I should be able get 60Hz but I need to set a custom resolution, but can't. No intel drivers available these days as per a lot of forum posts over the last year…
    Can you help Danchar4?
    Jan – where did you get the driver?


  10. For now, you can use the intel.com 15.40 driver ( which I confirmed to work on SP3 with the latest Windows 10 builds: downloadcenter.intel.com/search. Make sure to download the .zip and use the "have disk" install instructions above.
    I don't know what changed in the latest Surface driver ( and haven't had a chance to look into this deeply. The intel.com driver is only 1 month older than the Microsoft driver according to the build date so they ought to have similar feature payload.
    Do post again if you have any issues with the 4300 driver.


  11. Hello! This is my first visit to your blog! We are a group of volunteers and starting a new initiative in a community in the same niche. Your blog provided us useful information to work on. You have done a outstanding job!


  12. I’ve been happily using the registry tweak for months on my SP3 running Win8.1. Today I updated my video driver with the file from https://www.microsoft.com/en-us/download/details.aspx?id=38826 and the version was updated to After many reboots, and re-merging of the registry tweak, all the custom resolutions were always ignored. It also did not matter if the SP3 was connected to an external monitor. Giving up, I rolled back the driver using device manager and all the custom resolutions appeared again. The version it rolled back to was I’m hoping the custom resolution feature hasn’t been removed, and instead there is some other setting which enables/disables custom resolutions. Any thoughts?


    • Sorry for the trouble you’re having. It seems the regkey keep changing with new versions of the Intel driver. I don’t know why they keep doing that. Can you try installing the latest 4474 driver from Intel.com?

      Or this version of the 4414 driver:

      Use the “have disk” method to over-write the Microsoft-provided driver as I posted about earlier.

      I believe the 4474 and 4414 driver from intel.com includes the custom resolution tool that will let you add those resolutions back manually. I don’t have an SP3 handy to test this so if you can give it a shot and write back that would help out the community a lot.

      I can then work on building a new regkey file that works for these newer drivers as well.


      • I installed the Intel 4414 version, then I added all the resolutions from your screenshot in this blog (my SP3 ignores the bottom 2, but I added them anyway). According Process Monitor, the only real changes were still being saved to registry key C_MODES_LFP_2b. I exported that key (saved under /0000 for me), uninstalled Intel 4414 and installed Microsoft 4414. After reapplying my registry key and restarting, all the resolutions came back. I had forgot to note earlier that only 1 custom resolution (1080×720) stuck around when I first upgraded. Maybe this means Intel is using a different character to separate the resolutions in the hex code (wild guess). I didn’t try the lastest driver since it is only in beta. Here is my generated registry key in case it helps anyone:


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.