From 93b819154f625c4bf2fe369af35f1d9f93ebf8ce Mon Sep 17 00:00:00 2001 From: Nanley Chery Date: Thu, 19 Jan 2017 10:21:38 -0800 Subject: 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 Reviewed-by: Jason Ekstrand --- 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 20c9b157288..8db26e99121 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 -- cgit v1.2.3