From 1d21588de77cce5acf599d2ccde6679c52be001f Mon Sep 17 00:00:00 2001 From: Giovanni Mascellani Date: Wed, 11 Sep 2024 22:55:09 +0200 Subject: [PATCH] vkd3d-shader/ir: Record leaving a block in the relevant validation handlers. --- libs/vkd3d-shader/ir.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c index 1efb7106..f6c18273 100644 --- a/libs/vkd3d-shader/ir.c +++ b/libs/vkd3d-shader/ir.c @@ -6193,6 +6193,8 @@ static void vsir_validate_branch(struct validation_context *ctx, const struct vk instruction->src[i].reg.type); } } + + ctx->inside_block = false; } static void vsir_validate_dcl_temps(struct validation_context *ctx, @@ -6359,6 +6361,7 @@ static void vsir_validate_rep(struct validation_context *ctx, const struct vkd3d static void vsir_validate_ret(struct validation_context *ctx, const struct vkd3d_shader_instruction *instruction) { + ctx->inside_block = false; } static void vsir_validate_switch(struct validation_context *ctx, const struct vkd3d_shader_instruction *instruction) @@ -6412,6 +6415,8 @@ static void vsir_validate_switch_monolithic(struct validation_context *ctx, "Invalid label register for case %u of type %#x in monolithic SWITCH instruction, " "expected LABEL.", i, instruction->src[value_idx].reg.type); } + + ctx->inside_block = false; } struct vsir_validator_instruction_desc @@ -6565,16 +6570,6 @@ static void vsir_validate_instruction(struct validation_context *ctx) ctx->inside_block = true; break; - case VKD3DSIH_RET: - case VKD3DSIH_BRANCH: - case VKD3DSIH_SWITCH_MONOLITHIC: - if (!ctx->inside_block) - validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_CONTROL_FLOW, - "Invalid instruction %#x outside any block.", - instruction->opcode); - ctx->inside_block = false; - break; - default: if (!ctx->inside_block) validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_CONTROL_FLOW,