mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
vkd3d-shader/hlsl: Fix a corner case in ternary type conversion.
If the condition and argument types are compatible, i.e. there is no broadcast, the resulting shape should be the shape of the arguments, not the shape of the condition.
This commit is contained in:
committed by
Henri Verbeet
parent
b2cddecfc5
commit
650bf4d83f
Notes:
Henri Verbeet
2024-09-23 15:57:02 +02:00
Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1099
@@ -5346,11 +5346,6 @@ static bool add_ternary(struct hlsl_ctx *ctx, struct hlsl_block *block,
|
||||
}
|
||||
else
|
||||
{
|
||||
cond_type = hlsl_get_numeric_type(ctx, cond_type->class, HLSL_TYPE_BOOL,
|
||||
cond_type->dimx, cond_type->dimy);
|
||||
if (!(cond = add_implicit_conversion(ctx, block, cond, cond_type, &cond->loc)))
|
||||
return false;
|
||||
|
||||
if (common_type->dimx == 1 && common_type->dimy == 1)
|
||||
{
|
||||
common_type = hlsl_get_numeric_type(ctx, cond_type->class,
|
||||
@@ -5372,6 +5367,11 @@ static bool add_ternary(struct hlsl_ctx *ctx, struct hlsl_block *block,
|
||||
hlsl_release_string_buffer(ctx, cond_string);
|
||||
hlsl_release_string_buffer(ctx, value_string);
|
||||
}
|
||||
|
||||
cond_type = hlsl_get_numeric_type(ctx, common_type->class, HLSL_TYPE_BOOL,
|
||||
common_type->dimx, common_type->dimy);
|
||||
if (!(cond = add_implicit_conversion(ctx, block, cond, cond_type, &cond->loc)))
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!(first = add_implicit_conversion(ctx, block, first, common_type, &first->loc)))
|
||||
|
Reference in New Issue
Block a user