From dc6313b0982638ce985db7a0b6fc4dbc60cefa60 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Fri, 19 Jun 2020 16:57:16 +1000 Subject: [PATCH] llvmpipe/fs: multisample depth/stencil bad ir generated Need to update the z value after updating the pos at pixel center, and later reupdate it again, so we can avoid some LLVM IR values not being dominant issues. Fixes: dEQP-VK.renderpass.suballocation.multisample.s8_uint.samples_4 Reviewed-by: Roland Scheidegger Part-of: --- src/gallium/drivers/llvmpipe/lp_state_fs.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c index 804ed9214c6..c57f2d4e6ee 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_fs.c +++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c @@ -881,6 +881,7 @@ generate_fs_loop(struct gallivm_state *gallivm, if (key->min_samples == 1) { /* for multisample Z needs to be re interpolated at pixel center */ lp_build_interp_soa_update_pos_dyn(interp, gallivm, loop_state.counter, NULL); + z = interp->pos[2]; lp_build_mask_update(&mask, tmp_s_mask_or); } } else { @@ -1119,6 +1120,11 @@ generate_fs_loop(struct gallivm_state *gallivm, 0); if (pos0 != -1 && outputs[pos0][2]) { z = LLVMBuildLoad(builder, outputs[pos0][2], "output.z"); + } else { + if (key->multisample) { + lp_build_interp_soa_update_pos_dyn(interp, gallivm, loop_state.counter, key->multisample ? sample_loop_state.counter : NULL); + z = interp->pos[2]; + } } /* * Clamp according to ARB_depth_clamp semantics. -- 2.30.2