Zebediah Figura : vkd3d-shader: Allocate constant registers for uniforms.
Alexandre Julliard
julliard at winehq.org
Tue Apr 13 16:17:34 CDT 2021
Module: vkd3d
Branch: master
Commit: 12e3109e005f31152ee294d4d9301fab2e41cec2
URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=12e3109e005f31152ee294d4d9301fab2e41cec2
Author: Zebediah Figura <zfigura at codeweavers.com>
Date: Thu Apr 8 23:38:27 2021 -0500
vkd3d-shader: Allocate constant registers for uniforms.
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
libs/vkd3d-shader/hlsl_codegen.c | 20 ++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/libs/vkd3d-shader/hlsl_codegen.c b/libs/vkd3d-shader/hlsl_codegen.c
index f7e1156..e254ced 100644
--- a/libs/vkd3d-shader/hlsl_codegen.c
+++ b/libs/vkd3d-shader/hlsl_codegen.c
@@ -840,9 +840,25 @@ static void allocate_const_registers_recurse(struct list *instrs, struct livenes
}
}
-static void allocate_const_registers(struct hlsl_ir_function_decl *entry_func)
+static void allocate_const_registers(struct hlsl_ctx *ctx, struct hlsl_ir_function_decl *entry_func)
{
struct liveness liveness = {0};
+ struct hlsl_ir_var *var;
+
+ LIST_FOR_EACH_ENTRY(var, &ctx->globals->vars, struct hlsl_ir_var, scope_entry)
+ {
+ if (var->is_uniform && var->last_read)
+ {
+ if (var->data_type->reg_size > 1)
+ var->reg = allocate_range(&liveness, 1, UINT_MAX, var->data_type->reg_size);
+ else
+ {
+ var->reg = allocate_register(&liveness, 1, UINT_MAX, 4);
+ var->reg.writemask = (1u << var->data_type->dimx) - 1;
+ }
+ TRACE("Allocated %s to %s.\n", var->name, debug_register('c', var->reg, var->data_type));
+ }
+ }
allocate_const_registers_recurse(entry_func->body, &liveness);
}
@@ -896,7 +912,7 @@ int hlsl_emit_dxbc(struct hlsl_ctx *ctx, struct hlsl_ir_function_decl *entry_fun
allocate_temp_registers(entry_func);
if (ctx->profile->major_version < 4)
- allocate_const_registers(entry_func);
+ allocate_const_registers(ctx, entry_func);
if (ctx->failed)
return VKD3D_ERROR_INVALID_SHADER;
More information about the wine-cvs
mailing list