engine/rr: lighter binary16 conversion guards in the hybrid stages
ptx2rr.py guards every cvt.rn.f16.f32 with two opaque zeros: on the f32 bits (against the fused multiply-convert, v_fma_mix*_f16) and on the binary16 bits (against RADV folding float(float16_t(x))). The hybrid stages' modules (enc0, dec0_1) also go through spv_exact_convert.py, whose NoContraction on every conversion already prevents the fold, so with --exact-convert only the f32 OR is emitted. Checked in RADV's ISA: the same v_cvt_f16_f32 / v_cvt_f32_f16 counts as before and no v_fma_mix*_f16 (dropping the f32 OR as well brings v_fma_mixlo_f16 back, so that one stays). Every image byte-identical on the replay inputs, the split gather build (D4R_RR2_SPLIT=1) as well. 224 / 153 fewer instructions; RX 9070 XT, 720p -> 1440p: enc0 747 -> 729 us, dec0_1 598 -> 592 us. Signed-off-by: itchyfeetleech <[email protected]>
This commit is contained in:
1 parent
49439afb81
commit
2fa4561bc1
3 files changed
+25
-2
No files matched your search
@@ -168,6 +168,9 @@ def main():
|
||||
cmd += [f'--buffer={off}' for off in BUFFERS.get(stage, [])]
|
||||
cmd += [f'--snorm16={off}' for off in SNORM16.get(stage, [])]
|
||||
cmd += [f'--surface={off}={fmt}' for off, fmt in SURFACES.get(stage, {}).items()]
|
||||
# the hybrid stages' modules go through spv_exact_convert.py, so their conversions need only the lighter guard
|
||||
exact = bool(a.native) and stage in HYBRID
|
||||
cmd += ['--exact-convert'] if exact else []
|
||||
subprocess.run(cmd, check=True, stderr=subprocess.DEVNULL)
|
||||
info = json.loads(generated.with_suffix('.json').read_text())
|
||||
weights = '-'
|
||||
|
||||
Reference in new issue
Block a user