[GPU] Texture integer scaling fetches; 8_8_8_8_GAMMA resolve

Integer num_format fetches now get their scale CPU-side instead of trying to guess in the shader. This is authoritative; no cvar. Both translators now use texture_integer_scale_bits after signs/gamma and before exponent bias. This alone fixes black screens and a bunch of rendering bugs across at least several dozen titles.

This new information lives in the updated FormatInfo table, including fixed component widths.

Resolve also has two new fixes.

8_8_8_8_GAMMA EDRAM sources can now decode through the PWL curve while still in linear space, before MSAA resolve or format conversion, then re-encoded for gamma destinations. This is also now default enabled via gamma_decode_pwl_resolve and has improved blowout in at least 4 titles, with no obvious regressions thus far.

Full resolve can also now pack fixed destinations according to copy_dest_number.
This commit is contained in:
goldislead
2026-06-30 20:40:19 -07:00
committed by Radosław Gliński
parent 573cce0fe2
commit d119505289
24 changed files with 669 additions and 156 deletions

View File

@@ -514,6 +514,11 @@ union ResolveEdramInfo {
// of the resolve region with the contents of the first surely covered
// column / row with resolution scaling.
uint32_t fill_half_pixel_offset : 1;
// Flag from gamma_decode_pwl_resolve in resolve shader. Some games appear
// overexposed unless full 8_8_8_8_GAMMA resolves decode PWL gamma to
// linear before MSAA averaging / conversion, then write gamma bytes again
// for gamma dests. Off keeps the old byte averaging.
uint32_t decode_pwl_gamma : 1;
};
ResolveEdramInfo() : packed(0) { static_assert_size(*this, sizeof(packed)); }
};