From d9d793696bf54e970491302605a1efd0aa182d1b Mon Sep 17 00:00:00 2001 From: Nanley Chery Date: Thu, 13 Apr 2017 09:52:31 -0700 Subject: [PATCH] anv/cmd_buffer: Disable CCS on BDW input attachments MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The description under RENDER_SURFACE_STATE::RedClearColor says, For Sampling Engine Multisampled Surfaces and Render Targets: Specifies the clear value for the red channel. For Other Surfaces: This field is ignored. This means that the sampler on BDW doesn't support CCS. Cc: Samuel Iglesias Gonsálvez Cc: Jordan Justen Cc: Reviewed-by: Jason Ekstrand Signed-off-by: Nanley Chery --- src/intel/vulkan/anv_blorp.c | 11 ---------- src/intel/vulkan/genX_cmd_buffer.c | 32 ++++++++++++------------------ 2 files changed, 13 insertions(+), 30 deletions(-) diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c index 67cb145a2c6..d17b73dcc7e 100644 --- a/src/intel/vulkan/anv_blorp.c +++ b/src/intel/vulkan/anv_blorp.c @@ -1398,7 +1398,6 @@ ccs_resolve_attachment(struct anv_cmd_buffer *cmd_buffer, * still hot in the cache. */ bool found_draw = false; - bool self_dep = false; enum anv_subpass_usage usage = 0; for (uint32_t s = subpass_idx + 1; s < pass->subpass_count; s++) { usage |= pass->attachments[att].subpass_usage[s]; @@ -1408,8 +1407,6 @@ ccs_resolve_attachment(struct anv_cmd_buffer *cmd_buffer, * wait to resolve until then. */ found_draw = true; - if (pass->attachments[att].subpass_usage[s] & ANV_SUBPASS_USAGE_INPUT) - self_dep = true; break; } } @@ -1468,14 +1465,6 @@ ccs_resolve_attachment(struct anv_cmd_buffer *cmd_buffer, * binding this surface to Sampler." */ resolve_op = BLORP_FAST_CLEAR_OP_RESOLVE_PARTIAL; - } else if (cmd_buffer->device->info.gen == 8 && self_dep && - att_state->input_aux_usage == ISL_AUX_USAGE_CCS_D) { - /* On Broadwell we still need to do resolves when there is a - * self-dependency because HW could not see fast-clears and works - * on the render cache as if there was regular non-fast-clear surface. - * To avoid any inconsistency, we force the resolve. - */ - resolve_op = BLORP_FAST_CLEAR_OP_RESOLVE_FULL; } } diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 13baf76b7e5..ddb22c45390 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -291,27 +291,21 @@ color_attachment_compute_aux_usage(struct anv_device *device, 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 && - !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 - * setting is only allowed if Surface Format supported for Fast - * Clear. In addition, if the surface is bound to the sampling - * engine, Surface Format must be supported for Render Target - * Compression for surfaces bound to the sampling engine." - * - * In other words, we can't sample from a fast-cleared image if it - * doesn't also support color compression. - */ - att_state->input_aux_usage = ISL_AUX_USAGE_NONE; - } else if (GEN_GEN >= 8) { - /* Broadwell/Skylake can sample from fast-cleared images */ + /* From the Sky Lake PRM, RENDER_SURFACE_STATE::AuxiliarySurfaceMode: + * + * "If Number of Multisamples is MULTISAMPLECOUNT_1, AUX_CCS_D + * setting is only allowed if Surface Format supported for Fast + * Clear. In addition, if the surface is bound to the sampling + * engine, Surface Format must be supported for Render Target + * Compression for surfaces bound to the sampling engine." + * + * In other words, we can only sample from a fast-cleared image if it + * also supports color compression. + */ + if (isl_format_supports_ccs_e(&device->info, iview->isl.format)) att_state->input_aux_usage = ISL_AUX_USAGE_CCS_D; - } else { - /* Ivy Bridge and Haswell cannot */ + else att_state->input_aux_usage = ISL_AUX_USAGE_NONE; - } } else { att_state->aux_usage = ISL_AUX_USAGE_NONE; att_state->input_aux_usage = ISL_AUX_USAGE_NONE; -- 2.30.2