Mesa (master): anv/cmd_buffer: Don' t temporarily enable CCS_E within a render pass

Nanley Chery nchery at kemper.freedesktop.org
Fri Feb 3 17:35:53 UTC 2017


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

Author: Nanley Chery <nanley.g.chery at intel.com>
Date:   Thu Jan 19 10:21:38 2017 -0800

anv/cmd_buffer: Don't temporarily enable CCS_E within a render pass

Compressing a render target and decompressing it in the same
single-subpass render pass may waste bandwidth. While this may be
beneficial in some circumstances, it does not help in all. Reclaims
about 1.95% FPS for Dota 2 on some configurations.

v2 (Jason Ekstrand):
- Provide a more thorough comment
- Enable CCS_D for input attachments
v3 (Jason Ekstrand):
- Provide performance numbers

Signed-off-by: Nanley Chery <nanley.g.chery at intel.com>
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

---

 src/intel/vulkan/genX_cmd_buffer.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c
index 20c9b15..8db26e9 100644
--- a/src/intel/vulkan/genX_cmd_buffer.c
+++ b/src/intel/vulkan/genX_cmd_buffer.c
@@ -266,12 +266,23 @@ color_attachment_compute_aux_usage(struct anv_device *device,
       att_state->fast_clear = false;
    }
 
-   if (isl_format_supports_ccs_e(&device->info, iview->isl.format)) {
+   /**
+    * TODO: Consider using a heuristic to determine if temporarily enabling
+    * CCS_E for this image view would be beneficial.
+    *
+    * While fast-clear resolves and partial resolves are fairly cheap in the
+    * case where you render to most of the pixels, full resolves are not
+    * because they potentially involve reading and writing the entire
+    * framebuffer.  If we can't texture with CCS_E, we should leave it off and
+    * limit ourselves to fast clears.
+    */
+   if (iview->image->aux_usage == ISL_AUX_USAGE_CCS_E) {
       att_state->aux_usage = ISL_AUX_USAGE_CCS_E;
       att_state->input_aux_usage = ISL_AUX_USAGE_CCS_E;
    } else if (att_state->fast_clear) {
       att_state->aux_usage = ISL_AUX_USAGE_CCS_D;
-      if (GEN_GEN >= 9) {
+      if (GEN_GEN >= 9 &&
+          !isl_format_supports_ccs_e(&device->info, iview->isl.format)) {
          /* From the Sky Lake PRM, RENDER_SURFACE_STATE::AuxiliarySurfaceMode:
           *
           *    "If Number of Multisamples is MULTISAMPLECOUNT_1, AUX_CCS_D




More information about the mesa-commit mailing list