mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-01-28 13:05:02 -08:00
vkd3d-shader/ir: Validate destination parameters.
This commit is contained in:
parent
585e60ad3b
commit
603170106c
Notes:
Alexandre Julliard
2023-09-22 22:46:19 +02:00
Approved-by: Francisco Casas (@fcasas) Approved-by: Henri Verbeet (@hverbeet) Approved-by: Alexandre Julliard (@julliard) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/317
@ -1374,7 +1374,7 @@ static void shader_dump_ins_modifiers(struct vkd3d_d3d_asm_compiler *compiler,
|
|||||||
if (mmask & VKD3DSPDM_PARTIALPRECISION) shader_addline(buffer, "_pp");
|
if (mmask & VKD3DSPDM_PARTIALPRECISION) shader_addline(buffer, "_pp");
|
||||||
if (mmask & VKD3DSPDM_MSAMPCENTROID) shader_addline(buffer, "_centroid");
|
if (mmask & VKD3DSPDM_MSAMPCENTROID) shader_addline(buffer, "_centroid");
|
||||||
|
|
||||||
mmask &= ~(VKD3DSPDM_SATURATE | VKD3DSPDM_PARTIALPRECISION | VKD3DSPDM_MSAMPCENTROID);
|
mmask &= ~VKD3DSPDM_MASK;
|
||||||
if (mmask) FIXME("Unrecognised modifier %#x.\n", mmask);
|
if (mmask) FIXME("Unrecognised modifier %#x.\n", mmask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1334,6 +1334,30 @@ static void vsir_validate_dst_param(struct validation_context *ctx,
|
|||||||
const struct vkd3d_shader_dst_param *dst)
|
const struct vkd3d_shader_dst_param *dst)
|
||||||
{
|
{
|
||||||
vsir_validate_register(ctx, &dst->reg);
|
vsir_validate_register(ctx, &dst->reg);
|
||||||
|
|
||||||
|
if (dst->write_mask & ~VKD3DSP_WRITEMASK_ALL)
|
||||||
|
validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_WRITE_MASK, "Destination has invalid write mask %#x.",
|
||||||
|
dst->write_mask);
|
||||||
|
|
||||||
|
if (dst->modifiers & ~VKD3DSPDM_MASK)
|
||||||
|
validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_MODIFIERS, "Destination has invalid modifiers %#x.",
|
||||||
|
dst->modifiers);
|
||||||
|
|
||||||
|
switch (dst->shift)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
case 1:
|
||||||
|
case 2:
|
||||||
|
case 3:
|
||||||
|
case 13:
|
||||||
|
case 14:
|
||||||
|
case 15:
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_SHIFT, "Destination has invalid shift %#x.",
|
||||||
|
dst->shift);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vsir_validate_src_param(struct validation_context *ctx,
|
static void vsir_validate_src_param(struct validation_context *ctx,
|
||||||
|
@ -185,6 +185,9 @@ enum vkd3d_shader_error
|
|||||||
VKD3D_SHADER_ERROR_VSIR_NOT_IMPLEMENTED = 9000,
|
VKD3D_SHADER_ERROR_VSIR_NOT_IMPLEMENTED = 9000,
|
||||||
VKD3D_SHADER_ERROR_VSIR_INVALID_HANDLER = 9001,
|
VKD3D_SHADER_ERROR_VSIR_INVALID_HANDLER = 9001,
|
||||||
VKD3D_SHADER_ERROR_VSIR_INVALID_REGISTER_TYPE = 9002,
|
VKD3D_SHADER_ERROR_VSIR_INVALID_REGISTER_TYPE = 9002,
|
||||||
|
VKD3D_SHADER_ERROR_VSIR_INVALID_WRITE_MASK = 9003,
|
||||||
|
VKD3D_SHADER_ERROR_VSIR_INVALID_MODIFIERS = 9004,
|
||||||
|
VKD3D_SHADER_ERROR_VSIR_INVALID_SHIFT = 9005,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum vkd3d_shader_opcode
|
enum vkd3d_shader_opcode
|
||||||
@ -601,6 +604,7 @@ enum vkd3d_shader_dst_modifier
|
|||||||
VKD3DSPDM_SATURATE = 1,
|
VKD3DSPDM_SATURATE = 1,
|
||||||
VKD3DSPDM_PARTIALPRECISION = 2,
|
VKD3DSPDM_PARTIALPRECISION = 2,
|
||||||
VKD3DSPDM_MSAMPCENTROID = 4,
|
VKD3DSPDM_MSAMPCENTROID = 4,
|
||||||
|
VKD3DSPDM_MASK = 7,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum vkd3d_shader_interpolation_mode
|
enum vkd3d_shader_interpolation_mode
|
||||||
|
Loading…
x
Reference in New Issue
Block a user