=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: vkd3d-shader: Clear output register status while leaving control point phase.

Alexandre Julliard julliard at winehq.org
Tue May 14 15:40:39 CDT 2019


Module: vkd3d
Branch: master
Commit: f0530d92b82c727e82a6781f3d9d7d04693ccd0f
URL:    https://source.winehq.org/git/vkd3d.git/?a=commit;h=f0530d92b82c727e82a6781f3d9d7d04693ccd0f

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Tue May 14 13:27:40 2019 +0200

vkd3d-shader: Clear output register status while leaving control point phase.

We need to clear output register status when epilogue function isn't
used.

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 libs/vkd3d-shader/spirv.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c
index 18e10ad..5477efd 100644
--- a/libs/vkd3d-shader/spirv.c
+++ b/libs/vkd3d-shader/spirv.c
@@ -4474,10 +4474,6 @@ static void vkd3d_dxbc_compiler_emit_shader_epilogue_function(struct vkd3d_dxbc_
     vkd3d_spirv_build_op_return(&compiler->spirv_builder);
     vkd3d_spirv_build_op_function_end(builder);
 
-    /* Fork and join phases share output registers (patch constants). */
-    if (!phase || is_control_point_phase(phase))
-        memset(compiler->output_info, 0, signature->element_count * sizeof(*compiler->output_info));
-
     memset(compiler->private_output_variable, 0, sizeof(compiler->private_output_variable));
     memset(compiler->private_output_variable_write_mask, 0, sizeof(compiler->private_output_variable_write_mask));
     compiler->epilogue_function_id = 0;
@@ -5443,6 +5439,12 @@ static void vkd3d_dxbc_compiler_leave_shader_phase(struct vkd3d_dxbc_compiler *c
         memset(&reg, 0, sizeof(reg));
         reg.idx[1].offset = ~0u;
 
+        /* Fork and join phases share output registers (patch constants).
+         * Control point phase has separate output registers. */
+        memset(compiler->output_info, 0, signature->element_count * sizeof(*compiler->output_info));
+        memset(compiler->private_output_variable, 0, sizeof(compiler->private_output_variable));
+        memset(compiler->private_output_variable_write_mask, 0, sizeof(compiler->private_output_variable_write_mask));
+
         for (i = 0; i < signature->element_count; ++i)
         {
             const struct vkd3d_shader_signature_element *e = &signature->elements[i];




More information about the wine-cvs mailing list