Mesa (master): llvmpipe: respect the sample mask in non-multisample flag

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Nov 4 02:44:17 UTC 2020


Module: Mesa
Branch: master
Commit: 47701d47e7919b369d19d5a0e234d92c8eb01476
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=47701d47e7919b369d19d5a0e234d92c8eb01476

Author: Dave Airlie <airlied at redhat.com>
Date:   Tue Nov  3 16:37:10 2020 +1000

llvmpipe: respect the sample mask in non-multisample flag

This partly revert
50987644 llvmpipe: don't use sample mask with 0 samples

since Vulkan wants this behaviour.

Reviewed-by: Roland Scheidegger <sroland at vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7435>

---

 src/gallium/drivers/llvmpipe/lp_state_fs.c | 6 ++++++
 src/gallium/drivers/llvmpipe/lp_state_fs.h | 1 +
 2 files changed, 7 insertions(+)

diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c
index c57f2d4e6ee..baea9130c89 100644
--- a/src/gallium/drivers/llvmpipe/lp_state_fs.c
+++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c
@@ -1030,6 +1030,11 @@ generate_fs_loop(struct gallivm_state *gallivm,
       assert(smaski >= 0);
       output_smask = LLVMBuildLoad(builder, outputs[smaski][0], "smask");
       output_smask = LLVMBuildBitCast(builder, output_smask, smask_bld.vec_type, "");
+      if (!key->multisample && key->no_ms_sample_mask_out) {
+         output_smask = lp_build_and(&smask_bld, output_smask, smask_bld.one);
+         output_smask = lp_build_cmp(&smask_bld, PIPE_FUNC_NOTEQUAL, output_smask, smask_bld.zero);
+         lp_build_mask_update(&mask, output_smask);
+      }
 
       if (key->min_samples > 1) {
          /* only the bit corresponding to this sample is to be used. */
@@ -3989,6 +3994,7 @@ make_variant_key(struct llvmpipe_context *lp,
 
    key->flatshade = lp->rasterizer->flatshade;
    key->multisample = lp->rasterizer->multisample;
+   key->no_ms_sample_mask_out = lp->rasterizer->no_ms_sample_mask_out;
    if (lp->active_occlusion_queries && !lp->queries_disabled) {
       key->occlusion_count = TRUE;
    }
diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.h b/src/gallium/drivers/llvmpipe/lp_state_fs.h
index 4dd48db356e..ad28b4f6c7f 100644
--- a/src/gallium/drivers/llvmpipe/lp_state_fs.h
+++ b/src/gallium/drivers/llvmpipe/lp_state_fs.h
@@ -84,6 +84,7 @@ struct lp_fragment_shader_variant_key
    unsigned resource_1d:1;
    unsigned depth_clamp:1;
    unsigned multisample:1;
+   unsigned no_ms_sample_mask_out:1;
 
    enum pipe_format zsbuf_format;
    enum pipe_format cbuf_format[PIPE_MAX_COLOR_BUFS];



More information about the mesa-commit mailing list