mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-01-28 13:05:02 -08:00
vkd3d-shader/ir: Validate destination write masks depending on the dimension.
This commit is contained in:
parent
15e7711786
commit
bd9118cac4
Notes:
Alexandre Julliard
2024-01-04 23:09:37 +01:00
Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Henri Verbeet (@hverbeet) Approved-by: Alexandre Julliard (@julliard) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/530
@ -1649,6 +1649,26 @@ static void vsir_validate_dst_param(struct validation_context *ctx,
|
||||
validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_WRITE_MASK, "Destination has invalid write mask %#x.",
|
||||
dst->write_mask);
|
||||
|
||||
switch (dst->reg.dimension)
|
||||
{
|
||||
case VSIR_DIMENSION_SCALAR:
|
||||
if (dst->write_mask != VKD3DSP_WRITEMASK_0)
|
||||
validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_WRITE_MASK, "Scalar destination has invalid write mask %#x.",
|
||||
dst->write_mask);
|
||||
break;
|
||||
|
||||
case VSIR_DIMENSION_VEC4:
|
||||
if (dst->write_mask == 0)
|
||||
validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_WRITE_MASK, "Vec4 destination has empty write mask.");
|
||||
break;
|
||||
|
||||
default:
|
||||
if (dst->write_mask != 0)
|
||||
validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_WRITE_MASK, "Destination of dimension %u has invalid write mask %#x.",
|
||||
dst->reg.dimension, dst->write_mask);
|
||||
break;
|
||||
}
|
||||
|
||||
if (dst->modifiers & ~VKD3DSPDM_MASK)
|
||||
validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_MODIFIERS, "Destination has invalid modifiers %#x.",
|
||||
dst->modifiers);
|
||||
|
Loading…
x
Reference in New Issue
Block a user