From b5c067b41a173e2ab252d5a3588f807c3ade5b2a Mon Sep 17 00:00:00 2001 From: Conor McCarthy Date: Wed, 6 Dec 2023 12:37:38 +1000 Subject: [PATCH] vkd3d-shader/ir: Do not merge signature elements which have different interpolation modes. Regression in signature normalisation, however the old code was not correct either because it would apply the interpolation mode to all components. Found in an Assassin's Creed: Valhalla shader. --- libs/vkd3d-shader/ir.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c index acdb660e..710811c6 100644 --- a/libs/vkd3d-shader/ir.c +++ b/libs/vkd3d-shader/ir.c @@ -777,8 +777,9 @@ static bool shader_signature_merge(struct shader_signature *s, uint8_t range_map f = &elements[j]; /* Merge different components of the same register unless sysvals are different, - * or it will be relative-addressed. */ + * interpolation modes are different, or it will be relative-addressed. */ if (f->register_index != e->register_index || f->sysval_semantic != e->sysval_semantic + || f->interpolation_mode != e->interpolation_mode || range_map_get_register_count(range_map, f->register_index, f->mask) > 1) break;