VOGONS


First post, by vindasal

User metadata
Rank Newbie
Rank
Newbie

For some reason the bloom setting in this game is very particular about what hardware it supports, it seems like by 2010 no video cards at all support it. The only things I've actually seen run bloom in this game are C2D era Intel integrated graphics. I had hoped that dgVoodoo would rectify this, but unfortunately it doesn't seem to. I've tried just about every combination of settings possible in dgVoodoo, and it still does not work. Otherwise the game is fine, it's just something about the bloom. I'm just curious to know if someone with more knowledge than myself could investigate this and perhaps figure out what's causing this and how to fix it.

Reply 1 of 11, by Squall Leonhart

User metadata
Rank Newbie
Rank
Newbie

it expects the faulty linear scaling of devices prior to Geforce 8.

Reply 2 of 11, by vindasal

User metadata
Rank Newbie
Rank
Newbie
Squall Leonhart wrote on 2025-04-10, 15:43:

it expects the faulty linear scaling of devices prior to Geforce 8.

That's what I was looking for! Do you happen to know if there's any way to emulate this behavior on current hardware?

Reply 3 of 11, by Dege

User metadata
Rank l33t
Rank
l33t

Actually it's a problem on the game side. It needs non-pow2 textures for the bloom effect but misinterprets the D3D9 capability bits when checking out if they are supported.
It works only if the 3D device supports them conditionally, but not when they are unconditionally supported (like on modern hw).

I remembered thatI had a half-finished patch for this, now I quickly finalized it, it should work:

http://dege.fw.hu/Patches/bin/MotoGP_3_URT_bloom_patch.zip

Reply 4 of 11, by vindasal

User metadata
Rank Newbie
Rank
Newbie
Dege wrote on 2025-04-12, 18:26:
Actually it's a problem on the game side. It needs non-pow2 textures for the bloom effect but misinterprets the D3D9 capability […]
Show full quote

Actually it's a problem on the game side. It needs non-pow2 textures for the bloom effect but misinterprets the D3D9 capability bits when checking out if they are supported.
It works only if the 3D device supports them conditionally, but not when they are unconditionally supported (like on modern hw).

I remembered thatI had a half-finished patch for this, now I quickly finalized it, it should work:

http://dege.fw.hu/Patches/bin/MotoGP_3_URT_bloom_patch.zip

Thank you! Just spent a bit playing with this and it works beautifully, awesome to finally see this game at its full potential again.

Reply 5 of 11, by Squall Leonhart

User metadata
Rank Newbie
Rank
Newbie
Dege wrote on 2025-04-12, 18:26:

It needs non-pow2 textures for the bloom effect but misinterprets the D3D9 capability bits when checking out if they are supported.

It isn't misinterpretation, cap lookup returns D3DPTEXTURECAPS_NONPOW2CONDITIONAL false on all D3D10 hardware, whether used on XP or Vista and onwards.

This should be returning true for an emulated DX9 grade gpu.

Reply 6 of 11, by Dege

User metadata
Rank l33t
Rank
l33t
Squall Leonhart wrote on 2025-05-18, 14:44:
Dege wrote on 2025-04-12, 18:26:

It needs non-pow2 textures for the bloom effect but misinterprets the D3D9 capability bits when checking out if they are supported.

It isn't misinterpretation, cap lookup returns D3DPTEXTURECAPS_NONPOW2CONDITIONAL false on all D3D10 hardware, whether used on XP or Vista and onwards.

This should be returning true for an emulated DX9 grade gpu.

No, it is a misinterpretation. Actrually there are 2 cap bits here (describing 3 cases) to check against:
- GPU supporting pow2-textures only: D3DPTEXTURECAPS_POW2 = 1, D3DPTEXTURECAPS_NONPOW2CONDITIONAL = 0
- GPU supporting pow2-textures and nonpow2 ones under certain circumstances (like texture with 1 mipmap level, ...): D3DPTEXTURECAPS_POW2 = 1, D3DPTEXTURECAPS_NONPOW2CONDITIONAL = 1
- GPU supporting nonpow2 unconditionally (modern hw): D3DPTEXTURECAPS_POW2 = 0, D3DPTEXTURECAPS_NONPOW2CONDITIONAL = 0
- invalid case, making no sense: D3DPTEXTURECAPS_POW2 = 0, D3DPTEXTURECAPS_NONPOW2CONDITIONAL = 1

So, it's not enough to check out only D3DPTEXTURECAPS_NONPOW2CONDITIONAL .

Reply 7 of 11, by Squall Leonhart

User metadata
Rank Newbie
Rank
Newbie

ok, so the emulated Geforce FX and 4, and Radeon 9800 should expose D3DPTEXTURECAPS_POW2 & D3DPTEXTURECAPS_NONPOW2CONDITIONAL to look like a device of the time, i'm sure theres going to be many other games that have this issue as the DX guides were hodge podge based on the old incomplete d3dprim documentation.

Reply 8 of 11, by Dege

User metadata
Rank l33t
Rank
l33t
Squall Leonhart wrote on 2025-05-18, 23:16:

ok, so the emulated Geforce FX and 4, and Radeon 9800 should expose D3DPTEXTURECAPS_POW2 & D3DPTEXTURECAPS_NONPOW2CONDITIONAL to look like a device of the time, i'm sure theres going to be many other games that have this issue as the DX guides were hodge podge based on the old incomplete d3dprim documentation.

Yes, they (GF5700 and ATI8500) should, I can't remember their caps bits in dgVoodoo, probably wrong in this aspect. And the GF4 did not support nonpow2 at all, I think.

Btw, the SDK documentation (at least the DX2010 June) clearly describes how to interpret those bits.

Reply 9 of 11, by Squall Leonhart

User metadata
Rank Newbie
Rank
Newbie
Dege wrote on 2025-05-19, 05:59:

And the GF4 did not support nonpow2 at all, I think.

Conditional NPOT was supported as far back as Geforce 2, Alpha reportedly did not work properly on these though.

Reply 10 of 11, by Squall Leonhart

User metadata
Rank Newbie
Rank
Newbie

Some games released in the XP days rely on these conditional pow2 caps to determine padding and or clamping behavior, Europa 1400 for example has broken UI without the conditional POW2 caps, but it has a workaround in the form of a patch. This won't always be the case, so i believe the best course of action is to expose these on the emulated Geforce 4 device.

D3DPTEXTURECAPS_POW2
D3DPTEXTURECAPS_NONPOW2CONDITIONAL
D3DPTEXTURECAPS_CUBEMAP_POW2
D3DPTEXTURECAPS_VOLUMEMAP_POW2

D3DPTEXTURECAPS_POW2 is present on Geforce FX and 6
D3DPTEXTURECAPS_NONPOW2CONDITIONAL is not present on 6.

Reply 11 of 11, by Dege

User metadata
Rank l33t
Rank
l33t
Squall Leonhart wrote on 2025-09-06, 13:03:

D3DPTEXTURECAPS_POW2 is present on Geforce FX and 6
D3DPTEXTURECAPS_NONPOW2CONDITIONAL is not present on 6.

That sounds really weird. Because, according to the DX specs, it then means that a GF6 supports only POW2 textures. Which is not the case.

But as always, practice is different that theory. Looking into it, in practice many(?) games used that single flag D3DPTEXTURECAPS_NONPOW2CONDITIONAL to see if non-pow2 is conditional or not, and they didn't even assume POW2 only support. What is more, D3DPTEXTURECAPS_POW2 might have been used for checking against cube and volume texture nonpow2-support, instead of using their own related flags. And the cherry on top is that the flags reported was driver dependent for the same hw, so early GF4 drivers could report other flags than late GF4 drivers (for practical reasons, to remain compatible with existing software through a given DX API).

It's a complete mess, so I can only implement it as the standard says.