From 26e4191d4bb29fd05296f28c2c37e33a8eed4da9 Mon Sep 17 00:00:00 2001 From: Giovanni Mascellani Date: Tue, 24 Oct 2023 19:43:31 -0500 Subject: [PATCH] vkd3d-shader/ir: Validate the register dimension. --- libs/vkd3d-shader/ir.c | 4 ++++ libs/vkd3d-shader/tpf.c | 2 ++ libs/vkd3d-shader/vkd3d_shader_private.h | 3 +++ 3 files changed, 9 insertions(+) diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c index 76987310..fd594bad 100644 --- a/libs/vkd3d-shader/ir.c +++ b/libs/vkd3d-shader/ir.c @@ -1506,6 +1506,10 @@ static void vsir_validate_register(struct validation_context *ctx, if (reg->data_type >= VKD3D_DATA_COUNT) validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_DATA_TYPE, "Invalid register data type %#x.", reg->data_type); + + if (reg->dimension >= VSIR_DIMENSION_COUNT) + validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_DIMENSION, "Invalid register dimension %#x.", + reg->dimension); } static void vsir_validate_dst_param(struct validation_context *ctx, diff --git a/libs/vkd3d-shader/tpf.c b/libs/vkd3d-shader/tpf.c index a49457dc..afdf8473 100644 --- a/libs/vkd3d-shader/tpf.c +++ b/libs/vkd3d-shader/tpf.c @@ -549,6 +549,8 @@ static enum vkd3d_sm4_dimension sm4_dimension_from_vsir_dimension(enum vsir_dime return VKD3D_SM4_DIMENSION_SCALAR; case VSIR_DIMENSION_VEC4: return VKD3D_SM4_DIMENSION_VEC4; + case VSIR_DIMENSION_COUNT: + vkd3d_unreachable(); } vkd3d_unreachable(); } diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h index 4c483520..f8d10061 100644 --- a/libs/vkd3d-shader/vkd3d_shader_private.h +++ b/libs/vkd3d-shader/vkd3d_shader_private.h @@ -202,6 +202,7 @@ enum vkd3d_shader_error VKD3D_SHADER_ERROR_VSIR_INVALID_SWIZZLE = 9006, VKD3D_SHADER_ERROR_VSIR_INVALID_PRECISION = 9007, VKD3D_SHADER_ERROR_VSIR_INVALID_DATA_TYPE = 9008, + VKD3D_SHADER_ERROR_VSIR_INVALID_DIMENSION = 9009, }; enum vkd3d_shader_opcode @@ -601,6 +602,8 @@ enum vsir_dimension VSIR_DIMENSION_NONE, VSIR_DIMENSION_SCALAR, VSIR_DIMENSION_VEC4, + + VSIR_DIMENSION_COUNT, }; enum vkd3d_shader_src_modifier