Windows 8.x issues

Hello,

as already pointed out here https://discourse.vvvv.org/t/9818, https://discourse.vvvv.org/t/9471 & https://discourse.vvvv.org/t/11184 there are at least two major issues when using vvvv on windows 8.x and high resolution (so called retina) screens.

First issue:

The GUI gets garbled when scaling is enabled here

Control Panel\All Control Panel Items\Display

The gui distortion occurs when leaving (DX9) full screen for the first time.

This is related to the High DPI awareness of an application.The setting is stored in the registry under following path:

HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

And looks like this:

H:\VVVVs\vvvv_45beta31.2_x64\vvvv.exe		REG_SZ		HIGHDPIAWARE

To make the vvvv gui go back to normal one can delete this entry or right-click on vvvv.exe -> Properties -> Compatibility Tab -> untick “Disable display scaling on high DPI Settings” & apply. Unfortunately the setting gets enabled again when leaving the fullscreen the next time.

First I thought the Program Compatibility Assistant was to blame and I disabled the service. But it didn’t help.

Monitoring the registry changes using Process Monitor shows that vvvv is making the changes itself!?

According to this article one way High DPI awareness can be set is by adding the following xml-snippet to your application manifest:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>true</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>
</assembly>

Fortunately embedded application manifests can be altered :)
Either using mt.exe from windows sdk or more conveniently using resource tuner.

With the modified manifest (see below) the distortion no longer occurs (according to my limited tests). Lieber @joreg could you please look into this?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="asInvoker"
          uiAccess="false"/>
        </requestedPrivileges>
    </security>
  </trustInfo>
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>false</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>
</assembly>

Second Issue

Fullscreen

Basically everything is said in this thread: https://discourse.vvvv.org/t/9818. Only thing to add is that after deleting the respective registry key you can go to fullscreen, but only once - at least that’s what I am experiencing. When leaving fullscreen the setting is back. Monitoring the registry with Process Monitor again it seems vvvv creates the entry itself…

I can confirm the same behavior tested on a Dell XPS 15 9530 with high res display and Windows 8.1.

Both issues are NOT occurring on the same machine with Windows 7 Pro installed.
(However, Win 7 does not allow different scalings on multiple displays. Thus the highres display is not usable as soon as additional displays are connected to the machine)

now this i call a proper report. thanks. adding the dpiaware stuff to the manifest sounds like an easy thing to do. will let you know when it hits the alphas.

right, awesome report!

Regarding the fullscreen problem:

Source

Source

Just for my understanding: Are the native renderer windows actually a mix of directx & gdi?

Source

Ok, the fix mentioned above most likely wont work in windows 8

Source

I just tried the Application Compatibility Toolkit (ACT) and it also doesn’t expose the DisableDWM Fix anymore.

Source

When

HKEY_CURRENT_USER\Software\Microsoft\Direct3D\Shims\MaximizedWindowedMode

is deleted from the registry, vvvv can go in and out of fullscreen on a second display without problems. The setting only gets reanabled when going to fullscreen on the primary display.

Haven’t tried it (yet) though.

Initially I was going to write a rather lengthy post about the Desktop Window Manager (DWM) and the Windows Display Driver Model (WDDM) and what they do, but then I decided the respective wikipedia articles will do just fine :)

Baseline is both were introduced with Windows Vista “Aero Experience” (iirc that’s when first forum posts came up with unexpected behaviour of vvvv-windows, e.g. renderer / kommunikator. Just search for “Aero”).

In Windows Vista & 7 it was possible to disable the DWM by either disabling Aero or as already stated above programmatically by using the DwmEnableComposition API with an argument of DWM_EC_DISABLECOMPOSITION.

But in Windows 8 the DWM is always on and can no longer be disabled by end users and apps. On neowin someone even started a challenge to find ways for disabling it. But it turns out all “solutions” are rather laborious hacks (see yt video above).

So the only ones that are able to make this fullscreen issue go away are the devvvvs.
The keyword here seems to be redirection and how this works depends upon the window being gdi, directx or a mixture of both. There is a section on redirection in the dwm-wikipedia-article and Greg Schechter explains it in detail here

Schechter’s blog in general is a good source of information regarding the DWM though it’s from 2006 and might be dated.

now please check the latest alpha build which includes the dpiAware=false in the manifest as suggested by @bjoern and please report if that at least solves the first issue.

regarding the second issue:
vvvv is not creating such a registry entry by itself, as pointed out above windows seems to be doing this as it assumes vvvv has a problem.

not to my understanding. but obviously windows has a different understanding of the matter. btw. is this different for the dx11 renderer?

also: does it make a difference if you don’t go fullscreen “As Desktop” but choose a specific resolution?

DX11: Works as expected, no problems (at least not concerning the issues here).

“As Desktop” vs. specific resolution: Makes no difference, also tested some non-native resolutions.

No more GUI problems with vvvv 45alpha31.5 - 8015cf272f (x86).

Just downloaded a new version of virtual dub and by chance stumbled upon a post by the author detailing the process of making vdub dpi aware. Could be an interesting read for the devvvvs.

another random thought: when running dx9 in debug mode (via dx9 control panel) do you get anything in the event-log regarding this problem?

Sorry but apparently not an easy thing to do.

Source

bump… no text …

oui, sore fo late on this one. difficult to smell the bugger without a device at hand. now please check the latest alpha build.

  • the build has a new fullscreen swapeffect flipEx which needs to be used on win8.1
  • this only works with /dx9ex
  • and it only works without antialiasing!

for now i only tested a simple fullscreen case. were there also problems in windowed mode?

so apparently antialiasing with dx9 and win>8 needs an extra renderpass for fullscreen, horray. and at some point we should now probably default to /dx9ex loosing Flash (EX9) and Text (EX9.Geometry) which should be manageable.

please test and report.

oki.

Maybe Meso or Satis are willing to sponsor a PC for debugging. I could ask Markus or Max if you like… Or maybe nsynk? A windows 8 evaluation copy that lasts for 90 days can be downloaded here.

  • It is possible to go to fullscreen when starting vvvv with /dx9ex

  • changing Fullscreen Swap Effect to flipEx is not necessary

  • changing Windowed Swap Effect to flipEx results in the following error and the renderer stops rendering:

    00:04:43 * : Cannot create SwapChain. Try different parameters!

  • When setting Windowed Antialiasing Quality to something different than NONE, Windowed Swap Effect is reset to discard and discard is the only option that can be selected.

  • Same goes for the respective fullscreen pins.

  • when setting Fullscreen Swap Effect to flipEx without /dx9ex The renderer crashes and TTY throws the following error which can be fixed by deleting the renderer, alt+right-click doesn’t help:

    00:02:21 * : couldn’t draw vertexbuffer. D3DERR_INVALIDCALL

  • Antialias seems to work just fine in fullscreen when leaving the the swap effect set to discard

  • Windowed Antialiasing also works

  • Fullscreen Dimensions AsDesktop doesn’t work, native / desktop resolution is 2880*1800 but AsDesktop results in 1024 * 768

  • Windowed Mode (“borderless fullscreen”) works

  • Last but not least: The high DPI scaling problem is back or maybe I didn’t test thoroughly enough the last time. It now doesn’t occur after leaving fullscreen. But after closing vvvv the “Disable display scaling on high DPI Settings” setting in vvvv.exe → Properties → Compatibility Tab is enabled again (only if a renderer went fullscreen on the primary display). So before starting vvvv again, the setting has to be disabled :(