[Mesa-dev] [PATCH 14/14] anv: Add support for MSAA fast-clears
Jason Ekstrand
jason at jlekstrand.net
Mon Nov 13 16:12:54 UTC 2017
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(-)
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
More information about the mesa-dev
mailing list