From b5e1c458279428c86ccbcf0a03752d6e0b8bd98f Mon Sep 17 00:00:00 2001 From: Giovanni Mascellani Date: Thu, 26 Sep 2024 22:03:51 +0200 Subject: [PATCH] vkd3d-shader/ir: Validate the register type for registers used as relative addresses. --- libs/vkd3d-shader/ir.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c index cf077078..08328c13 100644 --- a/libs/vkd3d-shader/ir.c +++ b/libs/vkd3d-shader/ir.c @@ -7647,8 +7647,26 @@ static void vsir_validate_register(struct validation_context *ctx, for (i = 0; i < min(reg->idx_count, ARRAY_SIZE(reg->idx)); ++i) { const struct vkd3d_shader_src_param *param = reg->idx[i].rel_addr; - if (reg->idx[i].rel_addr) + if (param) + { vsir_validate_src_param(ctx, param); + + switch (param->reg.type) + { + case VKD3DSPR_TEMP: + case VKD3DSPR_SSA: + case VKD3DSPR_ADDR: + case VKD3DSPR_LOOP: + case VKD3DSPR_OUTPOINTID: + break; + + default: + validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_REGISTER_TYPE, + "Invalid register type %#x for a relative address parameter.", + param->reg.type); + break; + } + } } switch (reg->type)