X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fglsl%2Fspirv.cpp;h=c6f15614f5c8a56a36c7e7236a1c785f081e0a19;hp=7b3e104e372c65a7d845bfd0a77c93358762aee3;hb=77f6973f58167d94059d3f324c29ab2ca8de4544;hpb=139924448ef4753b3942da07091a2630a037c034 diff --git a/source/glsl/spirv.cpp b/source/glsl/spirv.cpp index 7b3e104e..c6f15614 100644 --- a/source/glsl/spirv.cpp +++ b/source/glsl/spirv.cpp @@ -1021,18 +1021,22 @@ void SpirVGenerator::visit(TernaryExpression &ternary) writer.write_op(content.function_body, OP_SELECTION_MERGE, merge_block_id, 0); // Selection control (none) writer.write_op(content.function_body, OP_BRANCH_CONDITIONAL, condition_id, true_label_id, false_label_id); + std::map saved_load_ids = variable_load_ids; + writer.write_op_label(true_label_id); ternary.true_expr->visit(*this); Id true_result_id = r_expression_result_id; true_label_id = writer.get_current_block(); writer.write_op(content.function_body, OP_BRANCH, merge_block_id); + swap(saved_load_ids, variable_load_ids); writer.write_op_label(false_label_id); ternary.false_expr->visit(*this); Id false_result_id = r_expression_result_id; false_label_id = writer.get_current_block(); writer.write_op_label(merge_block_id); + prune_loads(true_label_id); r_expression_result_id = begin_expression(OP_PHI, get_id(*ternary.type), 4); writer.write(true_result_id); writer.write(true_label_id);