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