[PATCH vkd3d v2 4/8] vkd3d-shader: Do not treat descriptor registers as arrayed.
Zebediah Figura
zfigura at codeweavers.com
Tue May 26 15:16:44 CDT 2020
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
libs/vkd3d-shader/spirv.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c
index d09e0fd..1b2cf3d 100644
--- a/libs/vkd3d-shader/spirv.c
+++ b/libs/vkd3d-shader/spirv.c
@@ -2821,6 +2821,21 @@ static bool vkd3d_dxbc_compiler_get_register_info(const struct vkd3d_dxbc_compil
return true;
}
+static bool register_is_descriptor(const struct vkd3d_shader_register *reg)
+{
+ switch (reg->type)
+ {
+ case VKD3DSPR_SAMPLER:
+ case VKD3DSPR_RESOURCE:
+ case VKD3DSPR_CONSTBUFFER:
+ case VKD3DSPR_UAV:
+ return true;
+
+ default:
+ return false;
+ }
+}
+
static void vkd3d_dxbc_compiler_emit_dereference_register(struct vkd3d_dxbc_compiler *compiler,
const struct vkd3d_shader_register *reg, struct vkd3d_shader_register_info *register_info)
{
@@ -2868,7 +2883,7 @@ static void vkd3d_dxbc_compiler_emit_dereference_register(struct vkd3d_dxbc_comp
FIXME("Relative addressing not implemented.\n");
/* Handle arrayed registers, e.g. v[3][0]. */
- if (reg->idx[1].offset != ~0u)
+ if (reg->idx[1].offset != ~0u && !register_is_descriptor(reg))
indexes[index_count++] = vkd3d_dxbc_compiler_emit_register_addressing(compiler, ®->idx[0]);
}
--
2.26.2
More information about the wine-devel
mailing list