diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index 45c2e2b7a34..da907456ec7 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -69,6 +69,7 @@ static const driOptionDescription anv_dri_options[] = {
DRI_CONF_VK_X11_STRICT_IMAGE_COUNT(false)
DRI_CONF_VK_XWAYLAND_WAIT_READY(true)
DRI_CONF_ANV_ASSUME_FULL_SUBGROUPS(false)
+ DRI_CONF_ANV_SAMPLE_MASK_OUT_OPENGL_BEHAVIOUR(false)
DRI_CONF_SECTION_END
DRI_CONF_SECTION_DEBUG
@@ -1107,6 +1108,8 @@ anv_init_dri_options(struct anv_instance *instance)
driQueryOptionb(&instance->dri_options, "anv_assume_full_subgroups");
instance->limit_trig_input_range =
driQueryOptionb(&instance->dri_options, "limit_trig_input_range");
+ instance->sample_mask_out_opengl_behaviour =
+ driQueryOptionb(&instance->dri_options, "anv_sample_mask_out_opengl_behaviour");
}
VkResult anv_CreateInstance(
diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c
index 8d4238f8bec..42e536c80a0 100644
--- a/src/intel/vulkan/anv_pipeline.c
+++ b/src/intel/vulkan/anv_pipeline.c
@@ -508,6 +508,9 @@ populate_wm_prog_key(const struct anv_graphics_pipeline *pipeline,
(ms_info->minSampleShading * ms_info->rasterizationSamples) > 1;
key->multisample_fbo = true;
}
+
+ if (device->physical->instance->sample_mask_out_opengl_behaviour)
+ key->ignore_sample_mask_out = !key->multisample_fbo;
}
key->coarse_pixel =
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index 5bb91ea8701..d486fa6cfc8 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -1086,6 +1086,7 @@ struct anv_instance {
*/
bool assume_full_subgroups;
bool limit_trig_input_range;
+ bool sample_mask_out_opengl_behaviour;
};
VkResult anv_init_wsi(struct anv_physical_device *physical_device);
diff --git a/src/util/00-mesa-defaults.conf b/src/util/00-mesa-defaults.conf
index ea6f116ba32..354042aad13 100644
--- a/src/util/00-mesa-defaults.conf
+++ b/src/util/00-mesa-defaults.conf
@@ -926,6 +926,9 @@ TODO: document the other workarounds.
+
+
+
diff --git a/src/util/driconf.h b/src/util/driconf.h
index 068ed227af0..2eb02fdd914 100644
--- a/src/util/driconf.h
+++ b/src/util/driconf.h
@@ -584,4 +584,8 @@
DRI_CONF_OPT_B(anv_assume_full_subgroups, def, \
"Allow assuming full subgroups requirement even when it's not specified explicitly")
+#define DRI_CONF_ANV_SAMPLE_MASK_OUT_OPENGL_BEHAVIOUR(def) \
+ DRI_CONF_OPT_B(anv_sample_mask_out_opengl_behaviour, def, \
+ "Ignore sample mask out when having single sampled target")
+
#endif