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 NOT source modifiers.
This commit is contained in:
committed by
Henri Verbeet
parent
65c23999e8
commit
318d7466a8
Notes:
Henri Verbeet
2025-06-24 16:32:28 +02:00
Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1590
@@ -9743,7 +9743,7 @@ static void vsir_validate_src_param(struct validation_context *ctx,
|
|||||||
{
|
{
|
||||||
uint32_t data_type_mask;
|
uint32_t data_type_mask;
|
||||||
}
|
}
|
||||||
src_modifier_data[] =
|
src_modifier_data[VKD3DSPSM_COUNT] =
|
||||||
{
|
{
|
||||||
[VKD3DSPSM_NEG] = {F64_BIT | F32_BIT | F16_BIT | I32_BIT | U64_BIT | U32_BIT | U16_BIT},
|
[VKD3DSPSM_NEG] = {F64_BIT | F32_BIT | F16_BIT | I32_BIT | U64_BIT | U32_BIT | U16_BIT},
|
||||||
[VKD3DSPSM_BIAS] = {F32_BIT},
|
[VKD3DSPSM_BIAS] = {F32_BIT},
|
||||||
@@ -9757,6 +9757,11 @@ static void vsir_validate_src_param(struct validation_context *ctx,
|
|||||||
[VKD3DSPSM_DW] = {F32_BIT},
|
[VKD3DSPSM_DW] = {F32_BIT},
|
||||||
[VKD3DSPSM_ABS] = {F64_BIT | F32_BIT | F16_BIT},
|
[VKD3DSPSM_ABS] = {F64_BIT | F32_BIT | F16_BIT},
|
||||||
[VKD3DSPSM_ABSNEG] = {F64_BIT | F32_BIT | F16_BIT},
|
[VKD3DSPSM_ABSNEG] = {F64_BIT | F32_BIT | F16_BIT},
|
||||||
|
/* This doesn't make a lot of sense. NOT is used only by D3DBC, and
|
||||||
|
* apparently only for IF instructions reading from a CONSTBOOL register.
|
||||||
|
* However, currently the D3DBC parser generates those registers of
|
||||||
|
* type float, so for the moment let's allow that. */
|
||||||
|
[VKD3DSPSM_NOT] = {F32_BIT},
|
||||||
};
|
};
|
||||||
|
|
||||||
vsir_validate_register(ctx, &src->reg);
|
vsir_validate_register(ctx, &src->reg);
|
||||||
@@ -9773,7 +9778,7 @@ static void vsir_validate_src_param(struct validation_context *ctx,
|
|||||||
validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_MODIFIERS, "Source has invalid modifiers %#x.",
|
validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_MODIFIERS, "Source has invalid modifiers %#x.",
|
||||||
src->modifiers);
|
src->modifiers);
|
||||||
|
|
||||||
if (src->modifiers < ARRAY_SIZE(src_modifier_data) && src_modifier_data[src->modifiers].data_type_mask)
|
if (src->modifiers != VKD3DSPSM_NONE && src->modifiers < ARRAY_SIZE(src_modifier_data))
|
||||||
{
|
{
|
||||||
if (!(src_modifier_data[src->modifiers].data_type_mask & (1u << src->reg.data_type)))
|
if (!(src_modifier_data[src->modifiers].data_type_mask & (1u << src->reg.data_type)))
|
||||||
validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_MODIFIERS,
|
validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_MODIFIERS,
|
||||||
|
Reference in New Issue
Block a user