G1: preserve GPU Posterize threshold parity

Use an explicit FMA for the final quotient correction at Posterize
boundaries. Align the kinetic motion-blur QA comparison with export
settings and credit sanyamsingh001.

Co-authored-by: Codex <[email protected]>
This commit is contained in:
sanyamsingh001andCodex committed 2026-10-09 23:03:05 +10:00
1 parent cae67546dd
commit 6d99f68330
3 files changed
+7 -1

No files matched your search

+4
View File
@@ -29,3 +29,7 @@ sync_github_name = false
[people.jonassneu]
sync_github_name = true
[people.sanyamsingh001]
display_name = "sanyamsingh001"
sync_github_name = false
+2
View File
@@ -71,6 +71,8 @@ fn kinetic_typography() {
// A precomp of everything, time-remapped to play backwards.
let pre = qa.exec("layer.precompose", json!({"layers": ["Title", "Sub"], "name": "Type Pre", "mode": "move"}));
assert!(pre["comp"].is_u64() && pre["layer"].is_u64(), "{pre}");
// Nested switches pass the precomp layer's blur flag down to the animated title.
qa.exec("layer.setSwitch", json!({"layers": [pre["layer"].clone()], "switch": "motionBlur", "value": true}));
qa.exec("layer.enableTimeRemap", json!({"layers": [pre["layer"].clone()], "value": true}));
qa.tool("add_keyframe", json!({"layer": pre["layer"].clone(), "path": "timeRemap", "keys": [{"time": 0, "value": 1.9}, {"time": 1.9, "value": 0}]}));
let fwd = qa.frame(Some(pre["comp"].clone()), 1.6);
+1 -1
View File
@@ -40,7 +40,7 @@ fn fxs_smoothstep(e0: f32, e1: f32, x: f32) -> f32 {
fn fxs_qdiv(x: vec3<f32>, a: f32) -> vec3<f32> {
let q = x / a;
let r = fma(-q, vec3<f32>(a), x);
return q + r / a;
return fma(r / a, vec3<f32>(1.0), q);
}
fn fxs_rem2(i: i32) -> i32 {