=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: vkd3d-shader: Do not generate shader epilogue for fork and join shader phases.

Alexandre Julliard julliard at winehq.org
Wed Feb 6 15:32:04 CST 2019


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

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Wed Feb  6 12:38:10 2019 +0100

vkd3d-shader: Do not generate shader epilogue for fork and join shader phases.

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 | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c
index 67701cc..ae0b195 100644
--- a/libs/vkd3d-shader/spirv.c
+++ b/libs/vkd3d-shader/spirv.c
@@ -4726,6 +4726,15 @@ static void vkd3d_dxbc_compiler_enter_shader_phase(struct vkd3d_dxbc_compiler *c
     vkd3d_spirv_build_op_name(builder, phase->function_id, "%s%u", name, id);
 }
 
+static const struct vkd3d_shader_phase *vkd3d_dxbc_compiler_get_current_shader_phase(
+        const struct vkd3d_dxbc_compiler *compiler)
+{
+    if (!compiler->shader_phase_count)
+        return NULL;
+
+    return &compiler->shader_phases[compiler->shader_phase_count - 1];
+}
+
 static void vkd3d_dxbc_compiler_emit_hull_shader_main(struct vkd3d_dxbc_compiler *compiler)
 {
     struct vkd3d_spirv_builder *builder = &compiler->spirv_builder;
@@ -5392,9 +5401,13 @@ static void vkd3d_dxbc_compiler_emit_return(struct vkd3d_dxbc_compiler *compiler
         const struct vkd3d_shader_instruction *instruction)
 {
     struct vkd3d_spirv_builder *builder = &compiler->spirv_builder;
+    const struct vkd3d_shader_phase *phase;
 
-    if (compiler->shader_type != VKD3D_SHADER_TYPE_GEOMETRY)
+    if (compiler->shader_type != VKD3D_SHADER_TYPE_GEOMETRY
+            && (!(phase = vkd3d_dxbc_compiler_get_current_shader_phase(compiler))
+            || phase->type == VKD3DSIH_HS_CONTROL_POINT_PHASE))
         vkd3d_dxbc_compiler_emit_shader_epilogue_invocation(compiler);
+
     vkd3d_spirv_build_op_return(builder);
 }
 




More information about the wine-cvs mailing list