anv/cmd_buffer: honor pending clear views for depth/stencil attachments

v2: rebased on top of subpass rework.

v3: rebased

v4:
 - rebased
 - reset pending clear views in one go rather one bit at a time (Caio)

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
Iago Toral Quiroga
2018-02-28 09:44:18 +01:00
parent f60c5fc17e
commit 31881079af

View File

@@ -3643,7 +3643,7 @@ cmd_buffer_begin_subpass(struct anv_cmd_buffer *cmd_buffer,
}
} else if (att_state->pending_clear_aspects & (VK_IMAGE_ASPECT_DEPTH_BIT |
VK_IMAGE_ASPECT_STENCIL_BIT)) {
if (att_state->fast_clear) {
if (att_state->fast_clear && !is_multiview) {
/* We currently only support HiZ for single-layer images */
if (att_state->pending_clear_aspects & VK_IMAGE_ASPECT_DEPTH_BIT) {
assert(iview->image->planes[0].aux_usage == ISL_AUX_USAGE_HIZ);
@@ -3658,6 +3658,26 @@ cmd_buffer_begin_subpass(struct anv_cmd_buffer *cmd_buffer,
iview->planes[0].isl.base_array_layer,
fb->layers, render_area,
att_state->clear_value.depthStencil.stencil);
} else if (is_multiview) {
uint32_t pending_clear_mask =
get_multiview_subpass_clear_mask(cmd_state, att_state);
uint32_t layer_idx;
for_each_bit(layer_idx, pending_clear_mask) {
uint32_t layer =
iview->planes[0].isl.base_array_layer + layer_idx;
anv_image_clear_depth_stencil(cmd_buffer, image,
att_state->pending_clear_aspects,
att_state->aux_usage,
iview->planes[0].isl.base_level,
layer, 1,
render_area,
att_state->clear_value.depthStencil.depth,
att_state->clear_value.depthStencil.stencil);
}
att_state->pending_clear_views &= ~pending_clear_mask;
} else {
anv_image_clear_depth_stencil(cmd_buffer, image,
att_state->pending_clear_aspects,