VOGONS


dgVoodoo 2.7.x and related WIP versions

Topic actions

Reply 360 of 428, by lowenz

User metadata
Rank Oldbie
Rank
Oldbie
VoidsShadow wrote on 2021-02-22, 02:36:
Xp-era Fullscreen is Exclusive Fullscreen. The app takes full control of the display. Fake fullscreen is essentially a window th […]
Show full quote
lowenz wrote on 2021-02-21, 23:08:

Thanks Dege!

Can I ask a favour? Reading there "fake fullscreen" .....can you explain me (us) ALL the different type of "fullscreen" mode existing today and how they compare 1) to one another 2) to classic fullscreen of WinXP era?

Xp-era Fullscreen is Exclusive Fullscreen. The app takes full control of the display.
Fake fullscreen is essentially a window that covers the whole screen (Borderless Fullscreen Window) and inherits Windows' Desktop Window Manager traits (enforced double-buffer V-Sync, Aero Theme processing, et cetera). Display settings are managed by Windows' DWM/Aero and system settings.

unknown.png

I'm asking about ALL possible versions of "Borderless Fullscreen Mode". Don't know if "Fake (exclusive) fullscreen" is part of them only 'cause there's no control of gamma and other monitor features.
Take Unreal Engine 4: it has "fullscreen" and "bordeless fullscreen", so they translate into "fake fullscreen" and "desktop-expanded window" (so it's not possible what you're saying, fake and and expanded window are not equivalent).
Or maybe it's more complex and they're different kind of "borderless" and it's why I'm asking Dege about.

1) Exclusive fullscreen is fake fullscreen?
2) Fake fullscreen is FLIP fullscreen?
3) FLIP fullscreen is a kind of borderless mode but not equivalent to desktop-expanded window?

It's not so trivial, there is a big number of combinations about what's "borderless" and not.

Reply 361 of 428, by Narzoul

User metadata
Rank Newbie
Rank
Newbie
lowenz wrote on 2021-02-22, 10:11:
I'm asking about ALL possible versions of "Borderless Fullscreen Mode". Don't know if "Fake (exclusive) fullscreen" is part of t […]
Show full quote

I'm asking about ALL possible versions of "Borderless Fullscreen Mode". Don't know if "Fake (exclusive) fullscreen" is part of them only 'cause there's no control of gamma and other monitor features.
Take Unreal Engine 4: it has "fullscreen" and "bordeless fullscreen", so they translate into "fake fullscreen" and "desktop-expanded window" (so it's not possible what you're saying, fake and and expanded window are not equivalent).
Or maybe it's more complex and they're different kind of "borderless" and it's why I'm asking Dege about.

1) Exclusive fullscreen is fake fullscreen?
2) Fake fullscreen is FLIP fullscreen?
3) FLIP fullscreen is a kind of borderless mode but not equivalent to desktop-expanded window?

It's not so trivial, there is a big number of combinations about what's "borderless" and not.

This article might be a good starting point, with links to additional material: https://devblogs.microsoft.com/directx/dxgi-flip-model/
It's a bit programming-oriented, but you can probably get the gist of it without knowing much about the DX APIs.

Reply 363 of 428, by Dege

User metadata
Rank l33t
Rank
l33t
VoidsShadow wrote on 2021-02-22, 05:07:

WIP78 Release build's x86 d3d9.dll does nothing. No window/rendering changes take effect and the dgVoodoo logo is not present. The debug binary works as expected with the same ini configuration.

How can that be? I use the same right now and it works. Doesn't your AV deletes d3d9.dll before you could use it?

lowenz wrote on 2021-02-21, 23:08:

Thanks Dege!

Can I ask a favour? Reading there "fake fullscreen" .....can you explain me (us) ALL the different type of "fullscreen" mode existing today and how they compare 1) to one another 2) to classic fullscreen of WinXP era?

Classic 98/XP era:
Full screen could only be achieved in exclusive mode. Exclusive mode mimiced the old DOS days where multimedia applications had direct access to the (display) hardware, possessed all hw resources unlike standard windowed GDI applications.
So, the rendered backbuffers could be presented to the screen by a very fast 'flip' operation which only involved modifying a register (describing the visible screen-area) on the video card (or sending a single command to do that) (flip model).
In windowed mode the rendered offscreen back buffer could only be copied (by hw) into the game window which was a much more expensive operation, especially when the window-clip region had to be taken into account (blit model).

Win Vista+ era:
When the desktop compositor, which is a fullscreen DX application itself, appeared then some things had to be changed.
For full screen exclusive the compositor had to be disabled for the given monitor output, giving the same access to the application as before. To my knowledge, legacy DXGI flip model still works this way in Win10, that's why gamma calibration still there.
For windowed presentation things got more complicated since it's the compositor who composes the final desktop image, so the blt-copy had to be redirected into a DWM-texture and allow the compositor to draw the window image from that texture later (at its own refresh rate) (blit model).
Or, if the application could declare that it's not interested in preserving the content of its backbuffers then the DWM could utilize directly the backbuffer for the texturing, omitting the copy-step, and allocating a new backbuffer to the app to be able to continue the rendering (blit-discard model for windowed mode).
This discard model as an option was backported to D3D9Ex too.

So, fake fullscreen always goes through the compositor and real full screen has the traditional direct fastest presentation technique.

BUT, MS also introduced the mix of the "discard blit" and the "flip" models: "flip discard" model. In this model the app has no longer direct access to the hw, the presentation always goes through the compositor and back buffer contents are discarded, no gamma calibration. So, it's basically the same as the blit-discard model for windowed mode. It's mandatory for D3D12.
AFAIR MS claimed in the blogs that they can do the presentation as fast as in real fullscreen thanks to the various optimizations in the compositor. I'm not sure if it's true because at insane frame rates (1000+) D3D11 seems to be faster for me.
I don't know if they introduced it in order to lower the margin for applications and letting the compositor always run to have better compatibility in the future or it's because of the fact that frame presenting must go through an application-created command queue and it cannot work in real flip-mode. I can't see into the deep internals of the graphics kernel and the compositor.

Fake fullscreen is the same as you can already achieve with borderless fullscreen size windowed mode except that it has mouse emulation enabled.
I think it's mostly useful for games that places other windows over the game window (like dialog boxes in Gruntz) because the rendering will not be pulled out from fullscreen-state and got minimized, etc.

So, what's the difference between real/fake fullscreen with D3D12 in dgVoodoo? I think basically nothing. "Real" fullscreen probably better for it though because D3D12 knows that it's in full screen state and can do any optimization it wants for frame presenting.

Reply 365 of 428, by lowenz

User metadata
Rank Oldbie
Rank
Oldbie
Dege wrote on 2021-02-21, 18:03:
- Changing the criterions for accepting incoming refresh rate values in DX: […]
Show full quote

- Changing the criterions for accepting incoming refresh rate values in DX:

  • Enumerate refrate enabled: any value accepted but replaced with the forced one
  • Enumerate refrate disabled: incoming value must match one or (one+1) (to workaround the problem of truncated/rounded rationals) from the internal list

http://dege.fw.hu/temp/dgVoodooWIP78.zip
http://dege.fw.hu/temp/dgVoodooWIP78_dbg.zip

NOT working in Pariah.

Still 60 Hz setting 75 and 75 setting 74 :p

Can you add one-1 ?

Reply 366 of 428, by Dege

User metadata
Rank l33t
Rank
l33t

The "problem" is with the game engine: it does not see the one+1 values in the enumerated list so if DesiredFrameRate is not found amongst them then it seems to pick up default 60 (or the lowest in the list) value.

Maybe a solution for that in dgVoodoo: let's have 60, 70, 72 and 75 Hz's as classic framerates. If the value-1 of them is available for the given resolution (coming from the physical adapter) then let's insert value into the list too, to have it seen by the application.

Reply 369 of 428, by Dege

User metadata
Rank l33t
Rank
l33t

I've released dgVoodoo 2.73.

It's basically the same as WIP78 except that I added the concept of 'classic refresh rates' to ease accepting those values. See readme for more.

  • Replacing the HLSL compiler in Glide ps shaders with an own code generator
    So now dgVoodoo does not need the external D3DCompiler at all
  • Optimizations in D3D sw vertex processing calcs
  • Optimizations in D3D state blocks + some minor D3D9 optimizations
  • Fixing a D3D9 shader incompatibility (Mass Effect)
  • Fixing a shader validator bug (Garfield - Lasagna World Tour)
  • Fixing a regression bug in D3D frontend (Crush)
  • Fixing another bug in D3D frontend
  • Fixing a D3D12 API driving bug
  • Fixing a bump mapping bug in FF shaders (Matrox G400 demo)
  • Fixing a cube texture resolution scaling bug (Colin McRae Rally 3)
  • Fixing a vs.1.x code generator bug (Splinter Cell 2)
  • Fixing D3D9 vs.3.x pointsize output (Fable 3)
  • Minor comparison sampling fix for D3D8/9 (Test Drive Unlimited 2) (D3D12 is recommended)
  • Fixing a D3D colorkeying bug (Restricted Area)
  • Changing the criterions for accepting incoming refresh rate values in DX (see the DirectX readme for details)
  • Fixing a bug in Glide D3D12 backend (Ultimate Race Pro)
  • Fixing an encountered Glide bug (texture chroma range)
  • Minor modification for Glide GrSstWinOpen to accept (and convert) more invalid buffercount combinations
  • Some debug layer fixings for Glide3 Napalm
  • Gamma ramps now automatically works with D3D12 (with underlying optimizations)
    - Color profile is always inherited because of calibration standards on modern systems
    - Option General\InheritColorProfileInFullScreenMode is only taken into account when a D3D11 output API is explicitly selected (compatibility mode for old hw)
  • Introducing option GeneralExt\FullscreenAttributes with attribute 'Fake' to enable fake fullscreen rendering
  • Enabling control tabbing + fixing tab-order for the CPL

http://dege.fw.hu/dgVoodoo2/bin/dgVoodoo2_73.zip
http://dege.fw.hu/dgVoodoo2/bin/dgVoodoo2_73_dbg.zip

Reply 370 of 428, by ZellSF

User metadata
Rank Oldbie
Rank
Oldbie

Not sure if you're keeping track, but the latest refresh rate changes fixes Sins of a Solar Empire. It was working, the settings weren't since it couldn't enumerate resolutions..

Edit: no this game is just weird.

Seems the game is saving something. It will only enumerate resolutions with the latest dgVoodoo version, but if you've run the game with that subsequent runs with earlier dgVoodoo versions will enumerate correctly. Really weird.

Reply 372 of 428, by Ivan89el

User metadata
Rank Newbie
Rank
Newbie
Dege wrote on 2021-02-26, 17:19:
I've released dgVoodoo 2.73. […]
Show full quote

I've released dgVoodoo 2.73.

It's basically the same as WIP78 except that I added the concept of 'classic refresh rates' to ease accepting those values. See readme for more.

  • Replacing the HLSL compiler in Glide ps shaders with an own code generator
    So now dgVoodoo does not need the external D3DCompiler at all
  • Optimizations in D3D sw vertex processing calcs
  • Optimizations in D3D state blocks + some minor D3D9 optimizations
  • Fixing a D3D9 shader incompatibility (Mass Effect)
  • Fixing a shader validator bug (Garfield - Lasagna World Tour)
  • Fixing a regression bug in D3D frontend (Crush)
  • Fixing another bug in D3D frontend
  • Fixing a D3D12 API driving bug
  • Fixing a bump mapping bug in FF shaders (Matrox G400 demo)
  • Fixing a cube texture resolution scaling bug (Colin McRae Rally 3)
  • Fixing a vs.1.x code generator bug (Splinter Cell 2)
  • Fixing D3D9 vs.3.x pointsize output (Fable 3)
  • Minor comparison sampling fix for D3D8/9 (Test Drive Unlimited 2) (D3D12 is recommended)
  • Fixing a D3D colorkeying bug (Restricted Area)
  • Changing the criterions for accepting incoming refresh rate values in DX (see the DirectX readme for details)
  • Fixing a bug in Glide D3D12 backend (Ultimate Race Pro)
  • Fixing an encountered Glide bug (texture chroma range)
  • Minor modification for Glide GrSstWinOpen to accept (and convert) more invalid buffercount combinations
  • Some debug layer fixings for Glide3 Napalm
  • Gamma ramps now automatically works with D3D12 (with underlying optimizations)
    - Color profile is always inherited because of calibration standards on modern systems
    - Option General\InheritColorProfileInFullScreenMode is only taken into account when a D3D11 output API is explicitly selected (compatibility mode for old hw)
  • Introducing option GeneralExt\FullscreenAttributes with attribute 'Fake' to enable fake fullscreen rendering
  • Enabling control tabbing + fixing tab-order for the CPL

http://dege.fw.hu/dgVoodoo2/bin/dgVoodoo2_73.zip
http://dege.fw.hu/dgVoodoo2/bin/dgVoodoo2_73_dbg.zip

Would you like to fix the problem?: Re: Problematic Windows games list
There is both on nvidia and on amd, to reproduce it, turn on the fog in the FFSETUP configurator

Reply 373 of 428, by lowenz

User metadata
Rank Oldbie
Rank
Oldbie

STALKER Shadow of Chernobyl (1.0006, but no fixed framerate/fixed vsync "multipatch") only runs in static lighting (full dynamic selected on the menu).

---------------------------

And forcing VSync forces HALF the monitor refresh rate (I'm playing @display-managed centered 1920x1200 frame over a QHD 75 Hz panel with dgVoodoo2 scaling mode set to "unspecified" or "centered" -> using "centered KAR" solves the issue, so I get 75 instead of 37/38).

Reply 374 of 428, by lowenz

User metadata
Rank Oldbie
Rank
Oldbie

Question: is it possible to fix blocky shadows artifacts in "pathological" D3D9 titles like Necrovision series or Blacksite: Area 51 like it was done with D3D8 and Splinter Cell 1/2 ?

Necro-Visio-N-2021-03-07-02-12-15-164.jpg

Necro-Visio-N-2021-03-07-02-13-02-374.jpg

Necro-Visio-N-2021-03-07-02-13-07-784.jpg

Maybe some people here may remember some other games having those artifacts (due to the shadowing technique ?)

Reply 376 of 428, by Glurak

User metadata
Rank Newbie
Rank
Newbie
Dege wrote on 2021-02-21, 18:03:
Ok, I fixed the color problem, but the game scene seems to be rendered properly only if the game window is not resized (misplace […]
Show full quote
Glurak wrote on 2021-02-18, 21:07:

The Game Restricted Area has still Color and a little performance issue 🙁

Ok, I fixed the color problem, but the game scene seems to be rendered properly only if the game window is not resized (misplaced lightmaps otherwise), so it can only be played at unforced resolution and unspecified scaling mode.
Performance problem: restart your computer to reset the internal system timer and it'll be smooth.

I release a new WIP:

=========================
WIP78:
=========================

- Fixing a cube texture resolution scaling bug (Colin McRae Rally 3)
- Fixing a vs.1.x code generator bug (Splinter Cell 2)
- Fixing D3D9 vs.3.x pointsize output (Fable 3)
- Some minor D3D9 optimizations
- Minor comparison sampling fix for D3D8/9 (Test Drive Unlimited 2)
- Enabling control tabbing + fixing tab-order for the CPL
- Minor modification for Glide GrSstWinOpen to accept (and convert) more invalid buffercount combinations
- Introducing option GeneralExt\FullscreenAttributes with attribute 'Fake' to enable fake fullscreen rendering
- Fixing a D3D colorkeying bug (Restricted Area)

- Changing the criterions for accepting incoming refresh rate values in DX:

  • Enumerate refrate enabled: any value accepted but replaced with the forced one
  • Enumerate refrate disabled: incoming value must match one or (one+1) (to workaround the problem of truncated/rounded rationals) from the internal list

http://dege.fw.hu/temp/dgVoodooWIP78.zip
http://dege.fw.hu/temp/dgVoodooWIP78_dbg.zip

HEy THx the game works find. Until i update to game version 1.10... Than videos dont really work. When i start in Window mode (per dgvoodoo) The intro works but not the one that comes after char creation and after chapters. When i play normal in fullscreen no video work at all.

Reply 377 of 428, by Dege

User metadata
Rank l33t
Rank
l33t

How did you manage to run Stalker through dgVoodoo? It has the DllMain issue.
For the "other" shadows, I'm not sure if they can be changed. Altough I don't know what technique (and especially, shaders) they are rendered and if the appearance is as expected, but I believe they are rendered through regular textures with custom shaders, unlike in Splinter Cell's where "plain" depth-textures with special comparison-sampling are used and because of that, the sampling process could be improved.

Reply 378 of 428, by ZellSF

User metadata
Rank Oldbie
Rank
Oldbie

CRT filter + integer scale + lanczos:

bad.jpg
Filename
bad.jpg
File size
101.89 KiB
Views
124 views
File license
Fair use/fair dealing exception

CRT filter + integer scale + bilinear:

good.jpg
Filename
good.jpg
File size
108.88 KiB
Views
124 views
File license
Fair use/fair dealing exception

Not important (I don't actually use these settings), but this seems to be a bug.