From 19bc3ec1041c53e14aafa6a3b4166e040a6ba9f5 Mon Sep 17 00:00:00 2001 From: Francisco Casas Date: Tue, 22 Jul 2025 20:46:14 -0400 Subject: [PATCH] vkd3d-shader/ir: Validate flags in RESINFO operations. --- libs/vkd3d-shader/ir.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c index c22088e60..c3bcf9058 100644 --- a/libs/vkd3d-shader/ir.c +++ b/libs/vkd3d-shader/ir.c @@ -11547,6 +11547,25 @@ static void vsir_validate_sample_info(struct validation_context *ctx, } } +static void vsir_validate_resinfo(struct validation_context *ctx, + const struct vkd3d_shader_instruction *instruction) +{ + enum vsir_data_type dst_data_type = instruction->dst[0].reg.data_type; + + switch (dst_data_type) + { + case VSIR_DATA_F32: + case VSIR_DATA_U32: + if (!!(instruction->flags & VKD3DSI_RESINFO_UINT) != (dst_data_type == VSIR_DATA_U32)) + vsir_validate_throw_invalid_dst_type_error_with_flags(ctx, instruction); + break; + + default: + vsir_validate_throw_invalid_dst_type_error_with_flags(ctx, instruction); + break; + } +} + static void vsir_validate_switch(struct validation_context *ctx, const struct vkd3d_shader_instruction *instruction) { vsir_validate_cf_type(ctx, instruction, VSIR_CF_STRUCTURED); @@ -11714,6 +11733,7 @@ static const struct vsir_validator_instruction_desc vsir_validator_instructions[ [VSIR_OP_PHI] = {1, ~0u, vsir_validate_phi}, [VSIR_OP_RCP] = {1, 1, vsir_validate_float_elementwise_operation}, [VSIR_OP_REP] = {0, 1, vsir_validate_rep}, + [VSIR_OP_RESINFO] = {1, 2, vsir_validate_resinfo}, [VSIR_OP_RET] = {0, 0, vsir_validate_ret}, [VSIR_OP_ROUND_NE] = {1, 1, vsir_validate_float_elementwise_operation}, [VSIR_OP_ROUND_NI] = {1, 1, vsir_validate_float_elementwise_operation},