[PATCH vkd3d v3 2/8] vkd3d-shader/hlsl: Add default writemask for matrix stores.
Francisco Casas
fcasas at codeweavers.com
Wed Mar 2 12:31:42 CST 2022
Signed-off-by: Francisco Casas <fcasas at codeweavers.com>
---
v3:
- This patch is new.
- While we don't use the default writemask for matrices (yet),
I think it is good for consistency, since we are getting rid
of the type_is_single_reg() function.
Signed-off-by: Francisco Casas <fcasas at codeweavers.com>
---
libs/vkd3d-shader/hlsl.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/libs/vkd3d-shader/hlsl.c b/libs/vkd3d-shader/hlsl.c
index 00a374b4..5152aec4 100644
--- a/libs/vkd3d-shader/hlsl.c
+++ b/libs/vkd3d-shader/hlsl.c
@@ -527,9 +527,13 @@ struct hlsl_ir_var *hlsl_new_synthetic_var(struct hlsl_ctx *ctx, const char *nam
return var;
}
-static bool type_is_single_reg(const struct hlsl_type *type)
+static unsigned int type_default_writemask(const struct hlsl_type *type)
{
- return type->type == HLSL_CLASS_SCALAR || type->type == HLSL_CLASS_VECTOR;
+ if (type->type == HLSL_CLASS_MATRIX && hlsl_type_is_row_major(type))
+ return (1 << type->dimy) - 1;
+ if (type->type <= HLSL_CLASS_LAST_NUMERIC)
+ return (1 << type->dimx) - 1;
+ return 0;
}
struct hlsl_ir_store *hlsl_new_store(struct hlsl_ctx *ctx, struct hlsl_ir_var *var, struct hlsl_ir_node *offset,
@@ -537,8 +541,8 @@ struct hlsl_ir_store *hlsl_new_store(struct hlsl_ctx *ctx, struct hlsl_ir_var *v
{
struct hlsl_ir_store *store;
- if (!writemask && type_is_single_reg(rhs->data_type))
- writemask = (1 << rhs->data_type->dimx) - 1;
+ if (!writemask)
+ writemask = type_default_writemask(rhs->data_type);
if (!(store = hlsl_alloc(ctx, sizeof(*store))))
return NULL;
--
2.25.1
More information about the wine-devel
mailing list