vkd3d-shader/hlsl: Don't cast all expressions to float.

Instead, allow half, bool, int, and uint, expressions that map to the
same float op to reach sm1_generate_vsir_instr_expr().
This commit is contained in:
Francisco Casas
2025-02-21 15:30:03 -03:00
committed by Henri Verbeet
parent 0ce2b1359f
commit 7cb1970952
Notes: Henri Verbeet 2025-03-03 18:04:53 +01:00
Approved-by: Elizabeth Figura (@zfigura)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1391
5 changed files with 85 additions and 26 deletions

View File

@@ -298,6 +298,35 @@ bool hlsl_type_is_patch_array(const struct hlsl_type *type)
|| type->e.array.array_type == HLSL_ARRAY_PATCH_OUTPUT);
}
bool hlsl_type_is_integer(const struct hlsl_type *type)
{
if (!hlsl_is_numeric_type(type))
return false;
switch (type->e.numeric.type)
{
case HLSL_TYPE_BOOL:
case HLSL_TYPE_INT:
case HLSL_TYPE_UINT:
return true;
case HLSL_TYPE_DOUBLE:
case HLSL_TYPE_FLOAT:
case HLSL_TYPE_HALF:
return false;
}
vkd3d_unreachable();
}
bool hlsl_type_is_floating_point(const struct hlsl_type *type)
{
if (!hlsl_is_numeric_type(type))
return false;
return !hlsl_type_is_integer(type);
}
/* Only intended to be used for derefs (after copies have been lowered to components or vectors) or
* resources, since for both their data types span across a single regset. */
static enum hlsl_regset type_get_regset(const struct hlsl_type *type)