Józef Kucia : vkd3d-shader: Do not generate shader epilogue for fork and join shader phases.
Module: vkd3d Branch: master Commit: b8b09e58fa5520d64f3f7f8ea083b153883998e4 URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=b8b09e58fa5520d64f3f7f8e... Author: Józef Kucia <jkucia(a)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(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)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); }
participants (1)
-
Alexandre Julliard