mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
vkd3d-shader/ir: Validate data types for NEG source modifiers.
This commit is contained in:
committed by
Henri Verbeet
parent
46fac7f264
commit
eb3383b04e
Notes:
Henri Verbeet
2025-06-19 20:51:40 +02:00
Approved-by: Elizabeth Figura (@zfigura) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1551
@@ -8659,9 +8659,27 @@ static void vsir_validate_io_src_param(struct validation_context *ctx,
|
||||
"Invalid register type %#x used as source parameter.", src->reg.type);
|
||||
}
|
||||
|
||||
#define F64_BIT (1u << VKD3D_DATA_DOUBLE)
|
||||
#define F32_BIT (1u << VKD3D_DATA_FLOAT)
|
||||
#define F16_BIT (1u << VKD3D_DATA_HALF)
|
||||
|
||||
#define I32_BIT (1u << VKD3D_DATA_INT)
|
||||
|
||||
#define U64_BIT (1u << VKD3D_DATA_UINT64)
|
||||
#define U32_BIT (1u << VKD3D_DATA_UINT)
|
||||
#define U16_BIT (1u << VKD3D_DATA_UINT16)
|
||||
|
||||
static void vsir_validate_src_param(struct validation_context *ctx,
|
||||
const struct vkd3d_shader_src_param *src)
|
||||
{
|
||||
static const struct
|
||||
{
|
||||
uint32_t data_type_mask;
|
||||
}
|
||||
src_modifier_data[] =
|
||||
{
|
||||
[VKD3DSPSM_NEG] = {F64_BIT | F32_BIT | F16_BIT | I32_BIT | U64_BIT | U32_BIT | U16_BIT},
|
||||
};
|
||||
vsir_validate_register(ctx, &src->reg);
|
||||
|
||||
if (src->swizzle & ~0x03030303u)
|
||||
@@ -8676,6 +8694,13 @@ static void vsir_validate_src_param(struct validation_context *ctx,
|
||||
validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_MODIFIERS, "Source has invalid modifiers %#x.",
|
||||
src->modifiers);
|
||||
|
||||
if (src->modifiers < ARRAY_SIZE(src_modifier_data) && src_modifier_data[src->modifiers].data_type_mask)
|
||||
{
|
||||
if (!(src_modifier_data[src->modifiers].data_type_mask & (1u << src->reg.data_type)))
|
||||
validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_MODIFIERS,
|
||||
"Source has invalid modifier %#x for data type %u.", src->modifiers, src->reg.data_type);
|
||||
}
|
||||
|
||||
switch (src->reg.type)
|
||||
{
|
||||
case VKD3DSPR_SSA:
|
||||
|
Reference in New Issue
Block a user