summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Ekstrand <jason@jlekstrand.net>2020-03-31 17:46:37 -0500
committerMarge Bot <eric+marge@anholt.net>2020-04-28 22:45:39 +0000
commit76d2772472037b2b9922f748170bebbce0b2a1de (patch)
tree896988b3dbe20ed4bcdb5104806a77fc68ceb162
parente63c662c26a6abfab5abf03a1646a236d6d730c0 (diff)
anv: Allow all clear colors for texturing on Gen11+
Starting with Gen11, we have two indirect clear colors: An unconverted float/int version which is us used for rendering and a converted pixel value version which is used for texturing. Because the one used for texturing is stored as a single pixel of that color, it works no matter what format is being used. Because it's a simple HW indirect and doesn't involve copying surface states around, we can use it in the sampler without having to worry about surface states having out-of-date clear values. The result is that we can now allow any clear color when texturing. This cuts the number of resolves in a RenderDoc trace of Dota2 by 95% on Gen11+ (you read that right) and improves perf by 3.5%. It improves perf in a handful of other workloads by < 1%. Reviewed-by: Rafael Antognolli <rafael.antognolli@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4393>
-rw-r--r--src/intel/vulkan/anv_image.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c
index 456fce1fc7f..19809884717 100644
--- a/src/intel/vulkan/anv_image.c
+++ b/src/intel/vulkan/anv_image.c
@@ -1604,12 +1604,20 @@ anv_layout_to_fast_clear_type(const struct gen_device_info * const devinfo,
return ANV_FAST_CLEAR_ANY;
} else if (image->planes[plane].aux_usage == ISL_AUX_USAGE_MCS ||
image->planes[plane].aux_usage == ISL_AUX_USAGE_CCS_E) {
- /* If the image has MCS or CCS_E enabled all the time then we can use
- * fast-clear as long as the clear color is the default value of zero
- * since this is the default value we program into every surface
- * state used for texturing.
- */
- return ANV_FAST_CLEAR_DEFAULT_VALUE;
+ if (devinfo->gen >= 11) {
+ /* On ICL and later, the sampler hardware uses a copy of the clear
+ * value that is encoded as a pixel value. Therefore, we can use
+ * any clear color we like for sampling.
+ */
+ return ANV_FAST_CLEAR_ANY;
+ } else {
+ /* If the image has MCS or CCS_E enabled all the time then we can
+ * use fast-clear as long as the clear color is the default value
+ * of zero since this is the default value we program into every
+ * surface state used for texturing.
+ */
+ return ANV_FAST_CLEAR_DEFAULT_VALUE;
+ }
} else {
return ANV_FAST_CLEAR_NONE;
}