Module: vkd3d Branch: master Commit: b8b09e58fa5520d64f3f7f8ea083b153883998e4 URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=b8b09e58fa5520d64f3f7f8e...
Author: Józef Kucia jkucia@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@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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); }