On Mon, Nov 13, 2017 at 08:12:54AM -0800, Jason Ekstrand wrote: > This speeds up the Sascha Willems multisampling demo by around 25% when > using 8x MSAA. > --- > src/intel/vulkan/anv_blorp.c | 6 ++++++ > src/intel/vulkan/genX_cmd_buffer.c | 22 ++++++++++++---------- > 2 files changed, 18 insertions(+), 10 deletions(-) >
For better performance, I think this patch should include a hunk in cmd_buffer_subpass_sync_fast_clear_values() to mark the needs_resolve dword to false if the fast clear color is 0. We currently do this for CCS_E. -Nanley > diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c > index 266cb9a..1e15797 100644 > --- a/src/intel/vulkan/anv_blorp.c > +++ b/src/intel/vulkan/anv_blorp.c > @@ -1549,6 +1549,12 @@ anv_cmd_buffer_resolve_subpass(struct anv_cmd_buffer > *cmd_buffer) > get_blorp_surf_for_anv_image(src_iview->image, > VK_IMAGE_ASPECT_COLOR_BIT, > src_aux_usage, &src_surf); > + if (src_aux_usage == ISL_AUX_USAGE_MCS) { > + src_surf.clear_color_addr = anv_to_blorp_address( > + anv_image_get_clear_color_addr(cmd_buffer->device, > + src_iview->image, > + VK_IMAGE_ASPECT_COLOR_BIT, 0)); > + } > get_blorp_surf_for_anv_image(dst_iview->image, > VK_IMAGE_ASPECT_COLOR_BIT, > dst_aux_usage, &dst_surf); > diff --git a/src/intel/vulkan/genX_cmd_buffer.c > b/src/intel/vulkan/genX_cmd_buffer.c > index 2491b1d..1c1c644 100644 > --- a/src/intel/vulkan/genX_cmd_buffer.c > +++ b/src/intel/vulkan/genX_cmd_buffer.c > @@ -244,8 +244,6 @@ color_attachment_compute_aux_usage(struct anv_device * > device, > } else if (iview->image->planes[0].aux_usage == ISL_AUX_USAGE_MCS) { > att_state->aux_usage = ISL_AUX_USAGE_MCS; > att_state->input_aux_usage = ISL_AUX_USAGE_MCS; > - att_state->fast_clear = false; > - return; > } else if (iview->image->planes[0].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; > @@ -281,7 +279,8 @@ color_attachment_compute_aux_usage(struct anv_device * > device, > } > } > > - assert(iview->image->planes[0].aux_surface.isl.usage & > ISL_SURF_USAGE_CCS_BIT); > + assert(iview->image->planes[0].aux_surface.isl.usage & > + (ISL_SURF_USAGE_CCS_BIT | ISL_SURF_USAGE_MCS_BIT)); > > att_state->clear_color_is_zero_one = > color_is_zero_one(att_state->clear_value.color, > iview->planes[0].isl.format); > @@ -726,9 +725,6 @@ transition_color_buffer(struct anv_cmd_buffer *cmd_buffer, > * if the initial layout is COLOR_ATTACHMENT_OPTIMAL. > */ > return; > - } else if (image->samples > 1) { > - /* MCS buffers don't need resolving. */ > - return; > } > > /* Perform a resolve to synchronize data between the main and aux buffer. > @@ -760,10 +756,16 @@ transition_color_buffer(struct anv_cmd_buffer > *cmd_buffer, > > genX(load_needs_resolve_predicate)(cmd_buffer, image, aspect, level); > > - anv_ccs_resolve(cmd_buffer, image, aspect, level, base_layer, > layer_count, > - image->planes[plane].aux_usage == ISL_AUX_USAGE_CCS_E ? > - BLORP_FAST_CLEAR_OP_RESOLVE_PARTIAL : > - BLORP_FAST_CLEAR_OP_RESOLVE_FULL); > + if (image->samples > 1) { > + anv_mcs_partial_resolve(cmd_buffer, image, aspect, > + base_layer, layer_count); > + } else { > + anv_ccs_resolve(cmd_buffer, image, aspect, > + level, base_layer, layer_count, > + image->planes[plane].aux_usage == > ISL_AUX_USAGE_CCS_E ? > + BLORP_FAST_CLEAR_OP_RESOLVE_PARTIAL : > + BLORP_FAST_CLEAR_OP_RESOLVE_FULL); > + } > > genX(set_image_needs_resolve)(cmd_buffer, image, aspect, level, false); > } > -- > 2.5.0.400.gff86faf > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev