anv: Allow HiZ in TRANSFER_SRC_OPTIMAL on Gen8-9
authorJason Ekstrand <jason@jlekstrand.net>
Wed, 4 Dec 2019 21:51:34 +0000 (15:51 -0600)
committerKenneth Graunke <kenneth@whitecape.org>
Sat, 4 Jan 2020 20:25:54 +0000 (12:25 -0800)
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/intel/vulkan/anv_blorp.c
src/intel/vulkan/anv_image.c

index 59ad344d9116dbe4be67c100e712af0e81b46e40..adbe405e2825f2d9916a0cf341e54693c530b59c 100644 (file)
@@ -238,16 +238,23 @@ get_blorp_surf_for_anv_image(const struct anv_device *device,
          const struct anv_address clear_color_addr =
             anv_image_get_clear_color_addr(device, image, aspect);
          blorp_surf->clear_color_addr = anv_to_blorp_address(clear_color_addr);
-      } else if (aspect & VK_IMAGE_ASPECT_DEPTH_BIT
-                 && device->info.gen >= 10) {
-         /* Vulkan always clears to 1.0. On gen < 10, we set that directly in
-          * the state packet. For gen >= 10, must provide the clear value in a
-          * buffer. We have a single global buffer that stores the 1.0 value.
-          */
-         const struct anv_address clear_color_addr = (struct anv_address) {
-            .bo = device->hiz_clear_bo,
-         };
-         blorp_surf->clear_color_addr = anv_to_blorp_address(clear_color_addr);
+      } else if (aspect & VK_IMAGE_ASPECT_DEPTH_BIT) {
+         if (device->info.gen >= 10) {
+            /* Vulkan always clears to 1.0. On gen < 10, we set that directly
+             * in the state packet. For gen >= 10, must provide the clear
+             * value in a buffer. We have a single global buffer that stores
+             * the 1.0 value.
+             */
+            const struct anv_address clear_color_addr = (struct anv_address) {
+               .bo = device->hiz_clear_bo,
+            };
+            blorp_surf->clear_color_addr =
+               anv_to_blorp_address(clear_color_addr);
+         } else {
+            blorp_surf->clear_color = (union isl_color_value) {
+               .f32 = { ANV_HZ_FC_VAL },
+            };
+         }
       }
    }
 }
index f2f89a012b6fd6a39ae742f93500cc80d2f3be74..2e3be531325b696084672357d7cb7f8d37df59ed 100644 (file)
@@ -1131,7 +1131,6 @@ anv_layout_to_aux_usage(const struct gen_device_info * const devinfo,
     */
    case VK_IMAGE_LAYOUT_GENERAL:
    case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL:
-   case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL:
       if (aspect == VK_IMAGE_ASPECT_DEPTH_BIT) {
          /* This buffer could be a depth buffer used in a transfer operation.
           * BLORP currently doesn't use HiZ for transfer operations so we must
@@ -1151,6 +1150,7 @@ anv_layout_to_aux_usage(const struct gen_device_info * const devinfo,
    case VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL:
       assert((image->aspects & VK_IMAGE_ASPECT_ANY_COLOR_BIT_ANV) == 0);
       /* Fall-through */
+   case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL:
    case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL:
       if (aspect == VK_IMAGE_ASPECT_DEPTH_BIT) {
          if (anv_can_sample_with_hiz(devinfo, image))