Module: vkd3d Branch: master Commit: b5c067b41a173e2ab252d5a3588f807c3ade5b2a URL: https://gitlab.winehq.org/wine/vkd3d/-/commit/b5c067b41a173e2ab252d5a3588f80...
Author: Conor McCarthy cmccarthy@codeweavers.com Date: Wed Dec 6 12:37:38 2023 +1000
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;