Thanks a lot!

Looks like reviewing patches on gitlab could really help ;)

-
Lionel

On 28/08/2018 18:18, Jason Ekstrand wrote:
Assuming nothing got lost in the indent, looks good to me.

Reviewed-by: Jason Ekstrand <ja...@jlekstrand.net <mailto:ja...@jlekstrand.net>>

On Tue, Aug 28, 2018 at 6:27 AM Lionel Landwerlin <lionel.g.landwer...@intel.com <mailto:lionel.g.landwer...@intel.com>> wrote:

    Newer blit tests are enabling depth&stencils blits. We currently don't
    support it but can do by iterating over the aspects masks (copy some
    logic from the CopyImage function).

    Signed-off-by: Lionel Landwerlin <lionel.g.landwer...@intel.com
    <mailto:lionel.g.landwer...@intel.com>>
    Fixes: 9f44745eca0e41 ("anv: Use blorp to implement VkBlitImage")
    ---
     src/intel/vulkan/anv_blorp.c | 145
    ++++++++++++++++++-----------------
     1 file changed, 75 insertions(+), 70 deletions(-)

    diff --git a/src/intel/vulkan/anv_blorp.c
    b/src/intel/vulkan/anv_blorp.c
    index cd67cc636b2..35b304f92b3 100644
    --- a/src/intel/vulkan/anv_blorp.c
    +++ b/src/intel/vulkan/anv_blorp.c
    @@ -532,81 +532,86 @@ void anv_CmdBlitImage(
           const VkImageSubresourceLayers *src_res =
    &pRegions[r].srcSubresource;
           const VkImageSubresourceLayers *dst_res =
    &pRegions[r].dstSubresource;

    -      get_blorp_surf_for_anv_image(cmd_buffer->device,
    -                                   src_image, src_res->aspectMask,
    -                                   srcImageLayout,
    ISL_AUX_USAGE_NONE, &src);
    -      get_blorp_surf_for_anv_image(cmd_buffer->device,
    -                                   dst_image, dst_res->aspectMask,
    -                                   dstImageLayout,
    ISL_AUX_USAGE_NONE, &dst);
    -
    -      struct anv_format_plane src_format =
    -  anv_get_format_plane(&cmd_buffer->device->info,
    src_image->vk_format,
    -                              src_res->aspectMask,
    src_image->tiling);
    -      struct anv_format_plane dst_format =
    -  anv_get_format_plane(&cmd_buffer->device->info,
    dst_image->vk_format,
    -                              dst_res->aspectMask,
    dst_image->tiling);
    -
    -      unsigned dst_start, dst_end;
    -      if (dst_image->type == VK_IMAGE_TYPE_3D) {
    -         assert(dst_res->baseArrayLayer == 0);
    -         dst_start = pRegions[r].dstOffsets[0].z;
    -         dst_end = pRegions[r].dstOffsets[1].z;
    -      } else {
    -         dst_start = dst_res->baseArrayLayer;
    -         dst_end = dst_start + anv_get_layerCount(dst_image,
    dst_res);
    -      }
    -
    -      unsigned src_start, src_end;
    -      if (src_image->type == VK_IMAGE_TYPE_3D) {
    -         assert(src_res->baseArrayLayer == 0);
    -         src_start = pRegions[r].srcOffsets[0].z;
    -         src_end = pRegions[r].srcOffsets[1].z;
    -      } else {
    -         src_start = src_res->baseArrayLayer;
    -         src_end = src_start + anv_get_layerCount(src_image,
    src_res);
    -      }
    -
    -      bool flip_z = flip_coords(&src_start, &src_end, &dst_start,
    &dst_end);
    -      float src_z_step = (float)(src_end + 1 - src_start) /
    -                         (float)(dst_end + 1 - dst_start);
    + assert(anv_image_aspects_compatible(src_res->aspectMask,
    + dst_res->aspectMask));
    +
    +      uint32_t aspect_bit;
    +      anv_foreach_image_aspect_bit(aspect_bit, src_image,
    src_res->aspectMask) {
    +         get_blorp_surf_for_anv_image(cmd_buffer->device,
    +                                      src_image, 1U << aspect_bit,
    +                                      srcImageLayout,
    ISL_AUX_USAGE_NONE, &src);
    +         get_blorp_surf_for_anv_image(cmd_buffer->device,
    +                                      dst_image, 1U << aspect_bit,
    +                                      dstImageLayout,
    ISL_AUX_USAGE_NONE, &dst);
    +
    +         struct anv_format_plane src_format =
    + anv_get_format_plane(&cmd_buffer->device->info,
    src_image->vk_format,
    +                                 1U << aspect_bit,
    src_image->tiling);
    +         struct anv_format_plane dst_format =
    + anv_get_format_plane(&cmd_buffer->device->info,
    dst_image->vk_format,
    +                                 1U << aspect_bit,
    dst_image->tiling);
    +
    +         unsigned dst_start, dst_end;
    +         if (dst_image->type == VK_IMAGE_TYPE_3D) {
    +            assert(dst_res->baseArrayLayer == 0);
    +            dst_start = pRegions[r].dstOffsets[0].z;
    +            dst_end = pRegions[r].dstOffsets[1].z;
    +         } else {
    +            dst_start = dst_res->baseArrayLayer;
    +            dst_end = dst_start + anv_get_layerCount(dst_image,
    dst_res);
    +         }

    -      if (flip_z) {
    -         src_start = src_end;
    -         src_z_step *= -1;
    -      }
    +         unsigned src_start, src_end;
    +         if (src_image->type == VK_IMAGE_TYPE_3D) {
    +            assert(src_res->baseArrayLayer == 0);
    +            src_start = pRegions[r].srcOffsets[0].z;
    +            src_end = pRegions[r].srcOffsets[1].z;
    +         } else {
    +            src_start = src_res->baseArrayLayer;
    +            src_end = src_start + anv_get_layerCount(src_image,
    src_res);
    +         }

    -      unsigned src_x0 = pRegions[r].srcOffsets[0].x;
    -      unsigned src_x1 = pRegions[r].srcOffsets[1].x;
    -      unsigned dst_x0 = pRegions[r].dstOffsets[0].x;
    -      unsigned dst_x1 = pRegions[r].dstOffsets[1].x;
    -      bool flip_x = flip_coords(&src_x0, &src_x1, &dst_x0, &dst_x1);
    +         bool flip_z = flip_coords(&src_start, &src_end,
    &dst_start, &dst_end);
    +         float src_z_step = (float)(src_end + 1 - src_start) /
    +            (float)(dst_end + 1 - dst_start);

    -      unsigned src_y0 = pRegions[r].srcOffsets[0].y;
    -      unsigned src_y1 = pRegions[r].srcOffsets[1].y;
    -      unsigned dst_y0 = pRegions[r].dstOffsets[0].y;
    -      unsigned dst_y1 = pRegions[r].dstOffsets[1].y;
    -      bool flip_y = flip_coords(&src_y0, &src_y1, &dst_y0, &dst_y1);
    +         if (flip_z) {
    +            src_start = src_end;
    +            src_z_step *= -1;
    +         }

    -      const unsigned num_layers = dst_end - dst_start;
    -      anv_cmd_buffer_mark_image_written(cmd_buffer, dst_image,
    - dst_res->aspectMask,
    -                                        dst.aux_usage,
    -                                        dst_res->mipLevel,
    -                                        dst_start, num_layers);
    -
    -      for (unsigned i = 0; i < num_layers; i++) {
    -         unsigned dst_z = dst_start + i;
    -         unsigned src_z = src_start + i * src_z_step;
    -
    -         blorp_blit(&batch, &src, src_res->mipLevel, src_z,
    -                    src_format.isl_format, src_format.swizzle,
    -                    &dst, dst_res->mipLevel, dst_z,
    -                    dst_format.isl_format, dst_format.swizzle,
    -                    src_x0, src_y0, src_x1, src_y1,
    -                    dst_x0, dst_y0, dst_x1, dst_y1,
    -                    blorp_filter, flip_x, flip_y);
    +         unsigned src_x0 = pRegions[r].srcOffsets[0].x;
    +         unsigned src_x1 = pRegions[r].srcOffsets[1].x;
    +         unsigned dst_x0 = pRegions[r].dstOffsets[0].x;
    +         unsigned dst_x1 = pRegions[r].dstOffsets[1].x;
    +         bool flip_x = flip_coords(&src_x0, &src_x1, &dst_x0,
    &dst_x1);
    +
    +         unsigned src_y0 = pRegions[r].srcOffsets[0].y;
    +         unsigned src_y1 = pRegions[r].srcOffsets[1].y;
    +         unsigned dst_y0 = pRegions[r].dstOffsets[0].y;
    +         unsigned dst_y1 = pRegions[r].dstOffsets[1].y;
    +         bool flip_y = flip_coords(&src_y0, &src_y1, &dst_y0,
    &dst_y1);
    +
    +         const unsigned num_layers = dst_end - dst_start;
    +         anv_cmd_buffer_mark_image_written(cmd_buffer, dst_image,
    +                                           1U << aspect_bit,
    +                                           dst.aux_usage,
    +  dst_res->mipLevel,
    +                                           dst_start, num_layers);
    +
    +         for (unsigned i = 0; i < num_layers; i++) {
    +            unsigned dst_z = dst_start + i;
    +            unsigned src_z = src_start + i * src_z_step;
    +
    +            blorp_blit(&batch, &src, src_res->mipLevel, src_z,
    +                       src_format.isl_format, src_format.swizzle,
    +                       &dst, dst_res->mipLevel, dst_z,
    +                       dst_format.isl_format, dst_format.swizzle,
    +                       src_x0, src_y0, src_x1, src_y1,
    +                       dst_x0, dst_y0, dst_x1, dst_y1,
    +                       blorp_filter, flip_x, flip_y);
    +         }
           }
    -
        }

        blorp_batch_finish(&batch);
-- 2.18.0

    _______________________________________________
    mesa-dev mailing list
    mesa-dev@lists.freedesktop.org <mailto: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

Reply via email to