vkd3d-shader/ir: Require signed source operands for signed integer comparison instructions.

This commit is contained in:
Henri Verbeet
2025-09-02 21:34:44 +02:00
parent 1912f50f52
commit 6e8192e198
Notes: Henri Verbeet 2025-09-18 11:44:24 +02:00
Approved-by: Giovanni Mascellani (@giomasce)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1733
2 changed files with 22 additions and 8 deletions

View File

@@ -11299,6 +11299,7 @@ static void vsir_validate_integer_elementwise_operation(struct validation_contex
static const bool types[VSIR_DATA_TYPE_COUNT] =
{
[VSIR_DATA_I32] = true,
[VSIR_DATA_I64] = true,
[VSIR_DATA_U32] = true,
[VSIR_DATA_U64] = true,
};
@@ -11399,6 +11400,18 @@ static void vsir_validate_integer_comparison_operation(struct validation_context
vsir_validate_comparison_operation(ctx, instruction, types);
}
static void vsir_validate_signed_integer_comparison_operation(struct validation_context *ctx,
const struct vkd3d_shader_instruction *instruction)
{
static const bool types[VSIR_DATA_TYPE_COUNT] =
{
[VSIR_DATA_I32] = true,
[VSIR_DATA_I64] = true,
};
vsir_validate_comparison_operation(ctx, instruction, types);
}
static void vsir_validate_cast_operation(struct validation_context *ctx,
const struct vkd3d_shader_instruction *instruction,
const bool src_types[VSIR_DATA_TYPE_COUNT], const bool dst_types[VSIR_DATA_TYPE_COUNT])
@@ -12369,8 +12382,8 @@ static const struct vsir_validator_instruction_desc vsir_validator_instructions[
[VSIR_OP_IEQ] = {1, 2, vsir_validate_integer_comparison_operation},
[VSIR_OP_IF] = {0, 1, vsir_validate_if},
[VSIR_OP_IFC] = {0, 2, vsir_validate_ifc},
[VSIR_OP_IGE] = {1, 2, vsir_validate_integer_comparison_operation},
[VSIR_OP_ILT] = {1, 2, vsir_validate_integer_comparison_operation},
[VSIR_OP_IGE] = {1, 2, vsir_validate_signed_integer_comparison_operation},
[VSIR_OP_ILT] = {1, 2, vsir_validate_signed_integer_comparison_operation},
[VSIR_OP_IMAD] = {1, 3, vsir_validate_integer_elementwise_operation},
[VSIR_OP_IMAX] = {1, 2, vsir_validate_integer_elementwise_operation},
[VSIR_OP_IMIN] = {1, 2, vsir_validate_integer_elementwise_operation},