radv: Specify semantics of HTILE layout helpers.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Sun, 14 May 2017 23:23:24 +0000 (01:23 +0200)
committerBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Mon, 22 May 2017 18:07:21 +0000 (20:07 +0200)
And correct implementation to specify only what we support.

Signed-off-by: Bas Nieuwenhuizen <basni@google.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
src/amd/vulkan/radv_cmd_buffer.c
src/amd/vulkan/radv_image.c
src/amd/vulkan/radv_private.h

index a9be89742718a8dbe4d4cff06d98183c9caff346..e0574f5cbf1c3ec85189278453091a87871caeac 100644 (file)
@@ -1104,6 +1104,10 @@ radv_emit_framebuffer_state(struct radv_cmd_buffer *cmd_buffer)
                struct radv_image *image = att->attachment->image;
                cmd_buffer->device->ws->cs_add_buffer(cmd_buffer->cs, att->attachment->bo, 8);
 
+               /* We currently don't support writing decompressed HTILE */
+               assert(radv_layout_has_htile(image, layout) ==
+                      radv_layout_is_htile_compressed(image, layout));
+
                radv_emit_fb_ds_state(cmd_buffer, &att->ds, image, layout);
 
                if (att->ds.offset_scale != cmd_buffer->state.offset_scale) {
index 0a36be0822d31e56757abd8d6ac1501f3dde001c..62f5f01400e0dfd8bec95ddd41ec25ba98fd1c0c 100644 (file)
@@ -773,14 +773,17 @@ radv_image_view_init(struct radv_image_view *iview,
 bool radv_layout_has_htile(const struct radv_image *image,
                            VkImageLayout layout)
 {
-       return (layout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL ||
-               layout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
+       return image->surface.htile_size &&
+              (layout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL ||
+               layout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
 }
 
 bool radv_layout_is_htile_compressed(const struct radv_image *image,
                                      VkImageLayout layout)
 {
-       return layout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
+       return image->surface.htile_size &&
+              (layout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL ||
+               layout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
 }
 
 bool radv_layout_can_fast_clear(const struct radv_image *image,
index 6c4027bbdb81c5b46b6067d0fb00260067b4b7cb..f9049802939b618115eaf8fcb4d8400db5c50be0 100644 (file)
@@ -1186,10 +1186,20 @@ struct radv_image {
        uint32_t clear_value_offset;
 };
 
+/* Whether the image has a htile that is known consistent with the contents of
+ * the image. */
 bool radv_layout_has_htile(const struct radv_image *image,
                            VkImageLayout layout);
+
+/* Whether the image has a htile  that is known consistent with the contents of
+ * the image and is allowed to be in compressed form.
+ *
+ * If this is false reads that don't use the htile should be able to return
+ * correct results.
+ */
 bool radv_layout_is_htile_compressed(const struct radv_image *image,
                                      VkImageLayout layout);
+
 bool radv_layout_can_fast_clear(const struct radv_image *image,
                                VkImageLayout layout,
                                unsigned queue_mask);