diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c index c8cbf1e4..03813656 100644 --- a/libs/vkd3d-shader/ir.c +++ b/libs/vkd3d-shader/ir.c @@ -1498,6 +1498,10 @@ static void vsir_validate_register(struct validation_context *ctx, if (reg->type >= VKD3DSPR_COUNT) validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_REGISTER_TYPE, "Invalid register type %#x.", reg->type); + + if (reg->precision >= VKD3D_SHADER_REGISTER_PRECISION_COUNT) + validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_PRECISION, "Invalid register precision %#x.", + reg->precision); } static void vsir_validate_dst_param(struct validation_context *ctx, diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h index 7a921578..6bb0882e 100644 --- a/libs/vkd3d-shader/vkd3d_shader_private.h +++ b/libs/vkd3d-shader/vkd3d_shader_private.h @@ -200,6 +200,7 @@ enum vkd3d_shader_error VKD3D_SHADER_ERROR_VSIR_INVALID_MODIFIERS = 9004, VKD3D_SHADER_ERROR_VSIR_INVALID_SHIFT = 9005, VKD3D_SHADER_ERROR_VSIR_INVALID_SWIZZLE = 9006, + VKD3D_SHADER_ERROR_VSIR_INVALID_PRECISION = 9007, }; enum vkd3d_shader_opcode @@ -556,6 +557,8 @@ enum vkd3d_shader_register_precision VKD3D_SHADER_REGISTER_PRECISION_MIN_INT_16, VKD3D_SHADER_REGISTER_PRECISION_MIN_UINT_16, + VKD3D_SHADER_REGISTER_PRECISION_COUNT, + VKD3D_SHADER_REGISTER_PRECISION_INVALID = ~0u, };