Module: vkd3d
Branch: master
Commit: b5c067b41a173e2ab252d5a3588f807c3ade5b2a
URL: https://gitlab.winehq.org/wine/vkd3d/-/commit/b5c067b41a173e2ab252d5a3588f8…
Author: Conor McCarthy <cmccarthy(a)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
…
[View More]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;
[View Less]