anv/dump: Use anv_minify instead of hand-rolling it
[mesa.git] / src / intel / vulkan / anv_dump.c
index b7fa28be78779b48e1424f898d592d82f96cf6c0..ffb892c17ac7ca837a35d7c179b64124ae324338 100644 (file)
 void
 anv_dump_image_to_ppm(struct anv_device *device,
                       struct anv_image *image, unsigned miplevel,
-                      unsigned array_layer, const char *filename)
+                      unsigned array_layer, VkImageAspectFlagBits aspect,
+                      const char *filename)
 {
    VkDevice vk_device = anv_device_to_handle(device);
-   VkResult result;
+   MAYBE_UNUSED VkResult result;
 
-   VkExtent2D extent = { image->extent.width, image->extent.height };
-   for (unsigned i = 0; i < miplevel; i++) {
-      extent.width = MAX2(1, extent.width / 2);
-      extent.height = MAX2(1, extent.height / 2);
-   }
+   VkExtent2D extent = {
+      anv_minify(image->extent.width, miplevel),
+      anv_minify(image->extent.height, miplevel),
+   };
 
    VkImage copy_image;
    result = anv_CreateImage(vk_device,
@@ -98,12 +98,15 @@ anv_dump_image_to_ppm(struct anv_device *device,
       });
    assert(result == VK_SUCCESS);
 
+   VkImageUsageFlags old_usage = image->usage;
+   image->usage |= VK_IMAGE_USAGE_SAMPLED_BIT;
+
    anv_CmdBlitImage(cmd,
       anv_image_to_handle(image), VK_IMAGE_LAYOUT_GENERAL,
       copy_image, VK_IMAGE_LAYOUT_GENERAL, 1,
       &(VkImageBlit) {
          .srcSubresource = {
-            .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
+            .aspectMask = aspect,
             .mipLevel = miplevel,
             .baseArrayLayer = array_layer,
             .layerCount = 1,
@@ -124,6 +127,8 @@ anv_dump_image_to_ppm(struct anv_device *device,
          },
       }, VK_FILTER_NEAREST);
 
+   image->usage = old_usage;
+
    ANV_CALL(CmdPipelineBarrier)(cmd,
       VK_PIPELINE_STAGE_TRANSFER_BIT,
       VK_PIPELINE_STAGE_TRANSFER_BIT,