From 0c18736370192cdc6681362c2735d1be58055e24 Mon Sep 17 00:00:00 2001 From: Elizabeth Figura Date: Sat, 2 Nov 2024 15:39:37 -0500 Subject: [PATCH] vkd3d-shader/ir: Validate SSA write masks. --- libs/vkd3d-shader/ir.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c index 3fe03167c..d25485ab0 100644 --- a/libs/vkd3d-shader/ir.c +++ b/libs/vkd3d-shader/ir.c @@ -8255,6 +8255,14 @@ static void vsir_validate_dst_param(struct validation_context *ctx, switch (dst->reg.type) { case VKD3DSPR_SSA: + if (dst->reg.dimension == VSIR_DIMENSION_VEC4 + && dst->write_mask != VKD3DSP_WRITEMASK_0 + && dst->write_mask != (VKD3DSP_WRITEMASK_0 | VKD3DSP_WRITEMASK_1) + && dst->write_mask != (VKD3DSP_WRITEMASK_0 | VKD3DSP_WRITEMASK_1 | VKD3DSP_WRITEMASK_2) + && dst->write_mask != VKD3DSP_WRITEMASK_ALL) + validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_WRITE_MASK, + "SSA register has invalid write mask %#x.", dst->write_mask); + if (dst->reg.idx[0].offset < ctx->program->ssa_count) { struct validation_context_ssa_data *data = &ctx->ssas[dst->reg.idx[0].offset];