On Mon, Nov 27, 2017 at 07:06:11PM -0800, Jason Ekstrand wrote:
> This unifies things a bit because we now handle depth and stencil at the
> same time. It also ensures that clears happen for input attachments.
> ---
> src/intel/vulkan/genX_cmd_buffer.c | 69
> ++++++++++++++++----------------------
> 1 file changed, 28 insertions(+), 41 deletions(-)
>
> diff --git a/src/intel/vulkan/genX_cmd_buffer.c
> b/src/intel/vulkan/genX_cmd_buffer.c
> index 3f90c1a..e5e0d1c 100644
> --- a/src/intel/vulkan/genX_cmd_buffer.c
> +++ b/src/intel/vulkan/genX_cmd_buffer.c
> @@ -3219,58 +3219,43 @@ cmd_buffer_begin_subpass(struct anv_cmd_buffer
> *cmd_buffer,
>
> VkRect2D render_area = cmd_buffer->state.render_area;
> struct anv_framebuffer *fb = cmd_buffer->state.framebuffer;
> - for (uint32_t i = 0; i < subpass->color_count; ++i) {
> - const uint32_t a = subpass->color_attachments[i].attachment;
> +
> + for (uint32_t i = 0; i < subpass->attachment_count; ++i) {
> + const uint32_t a = subpass->attachments[i].attachment;
> if (a == VK_ATTACHMENT_UNUSED)
> continue;
>
> assert(a < cmd_state->pass->attachment_count);
> struct anv_attachment_state *att_state = &cmd_state->attachments[a];
>
> - if (!att_state->pending_clear_aspects)
> - continue;
> -
> - assert(att_state->pending_clear_aspects == VK_IMAGE_ASPECT_COLOR_BIT);
> -
> struct anv_image_view *iview = fb->attachments[a];
> const struct anv_image *image = iview->image;
>
> - /* Multi-planar images are not supported as attachments */
> - assert(image->aspects == VK_IMAGE_ASPECT_COLOR_BIT);
> - assert(image->n_planes == 1);
> -
> - if (att_state->fast_clear) {
> - anv_image_ccs_op(cmd_buffer, image, VK_IMAGE_ASPECT_COLOR_BIT,
> - iview->planes[0].isl.base_level,
> - iview->planes[0].isl.base_array_layer,
> - fb->layers,
> - ISL_AUX_OP_FAST_CLEAR, false);
> - } else {
> - anv_image_clear_color(cmd_buffer, image, VK_IMAGE_ASPECT_COLOR_BIT,
> - att_state->aux_usage,
> - iview->planes[0].isl.format,
> - iview->planes[0].isl.swizzle,
> - iview->planes[0].isl.base_level,
> - iview->planes[0].isl.base_array_layer,
> - fb->layers, render_area,
> -
> vk_to_isl_color(att_state->clear_value.color));
> - }
> -
> - att_state->pending_clear_aspects = 0;
> - }
> -
> - if (subpass->depth_stencil_attachment.attachment != VK_ATTACHMENT_UNUSED)
> {
> - const uint32_t a = subpass->depth_stencil_attachment.attachment;
> -
> - assert(a < cmd_state->pass->attachment_count);
> - struct anv_attachment_state *att_state = &cmd_state->attachments[a];
> - struct anv_image_view *iview = fb->attachments[a];
> - const struct anv_image *image = iview->image;
> + if (att_state->pending_clear_aspects & VK_IMAGE_ASPECT_COLOR_BIT) {
> + assert(att_state->pending_clear_aspects ==
> VK_IMAGE_ASPECT_COLOR_BIT);
>
> - assert(image->aspects & (VK_IMAGE_ASPECT_DEPTH_BIT |
> - VK_IMAGE_ASPECT_STENCIL_BIT));
> + /* Multi-planar images are not supported as attachments */
> + assert(image->aspects == VK_IMAGE_ASPECT_COLOR_BIT);
> + assert(image->n_planes == 1);
>
> - if (att_state->pending_clear_aspects) {
> + if (att_state->fast_clear) {
> + anv_image_ccs_op(cmd_buffer, image, VK_IMAGE_ASPECT_COLOR_BIT,
> + iview->planes[0].isl.base_level,
> + iview->planes[0].isl.base_array_layer,
> + fb->layers,
> + ISL_AUX_OP_FAST_CLEAR, false);
> + } else {
> + anv_image_clear_color(cmd_buffer, image,
> VK_IMAGE_ASPECT_COLOR_BIT,
> + att_state->aux_usage,
> + iview->planes[0].isl.format,
> + iview->planes[0].isl.swizzle,
> + iview->planes[0].isl.base_level,
> + iview->planes[0].isl.base_array_layer,
> + fb->layers, render_area,
> +
> vk_to_isl_color(att_state->clear_value.color));
> + }
> + } else if (att_state->pending_clear_aspects &
> (VK_IMAGE_ASPECT_DEPTH_BIT |
> +
> VK_IMAGE_ASPECT_STENCIL_BIT)) {
> if (att_state->fast_clear) {
> /* We currently only support HiZ for single-layer images */
> assert(iview->planes[0].isl.base_level == 0);
> @@ -3293,6 +3278,8 @@ cmd_buffer_begin_subpass(struct anv_cmd_buffer
> *cmd_buffer,
>
> att_state->clear_value.depthStencil.depth,
>
> att_state->clear_value.depthStencil.stencil);
> }
> + } else {
Extra space before "{". Otherwise:
Reviewed-by: Topi Pohjolainen <[email protected]>
> + assert(att_state->pending_clear_aspects == 0);
> }
>
> att_state->pending_clear_aspects = 0;
> --
> 2.5.0.400.gff86faf
>
> _______________________________________________
> mesa-dev mailing list
> [email protected]
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev