diff options
author | Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> | 2017-05-15 01:23:24 +0200 |
---|---|---|
committer | Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> | 2017-05-22 20:07:21 +0200 |
commit | 0628580eff6110eda71e33ee608c633266bfdeff (patch) | |
tree | b19b0772afc786186afcaf788344cf64661eb3bb | |
parent | 62e182acd0b20eeb8ed3628048000b6ea4263f11 (diff) |
radv: Specify semantics of HTILE layout helpers.
And correct implementation to specify only what we support.
Signed-off-by: Bas Nieuwenhuizen <basni@google.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
-rw-r--r-- | src/amd/vulkan/radv_cmd_buffer.c | 4 | ||||
-rw-r--r-- | src/amd/vulkan/radv_image.c | 9 | ||||
-rw-r--r-- | src/amd/vulkan/radv_private.h | 10 |
3 files changed, 20 insertions, 3 deletions
diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index a9be8974271..e0574f5cbf1 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -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) { diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c index 0a36be0822d..62f5f01400e 100644 --- a/src/amd/vulkan/radv_image.c +++ b/src/amd/vulkan/radv_image.c @@ -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, diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 6c4027bbdb8..f9049802939 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -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); |