diff options
author | Nanley Chery <[email protected]> | 2016-06-27 15:24:36 -0700 |
---|---|---|
committer | Nanley Chery <[email protected]> | 2016-07-15 10:35:40 -0700 |
commit | e179fee049da7b880dfef6f71d2919f90b3dae4e (patch) | |
tree | d4ccb1535001dd921bddb7c62b98576eceb9c338 | |
parent | 1ef80b26d7488c1ac3174d4725d736ae3de9b4fd (diff) |
anv/blit2d: Copy with stencil sources when needed
In the next patch, ISL will unconditionally perform verification of a
surface's tiling and usage. Since it will require that w-tiled images
be stencil buffers, create a stencil surface to copy from a
w-tiled/stencil surface.
Signed-off-by: Nanley Chery <[email protected]>
Reviewed-by: Jason Ekstrand <[email protected]>
-rw-r--r-- | src/intel/vulkan/anv_meta_blit2d.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/intel/vulkan/anv_meta_blit2d.c b/src/intel/vulkan/anv_meta_blit2d.c index d37d69d96b7..e6c6875631d 100644 --- a/src/intel/vulkan/anv_meta_blit2d.c +++ b/src/intel/vulkan/anv_meta_blit2d.c @@ -105,7 +105,9 @@ create_iview(struct anv_cmd_buffer *cmd_buffer, const VkImageCreateInfo image_info = { .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, .imageType = VK_IMAGE_TYPE_2D, - .format = vk_format_for_size(surf->bs), + /* W-tiled images must be stencil-formatted. */ + .format = surf->tiling == ISL_TILING_W ? + VK_FORMAT_S8_UINT : vk_format_for_size(surf->bs), .extent = { .width = width, .height = height, @@ -140,7 +142,7 @@ create_iview(struct anv_cmd_buffer *cmd_buffer, .viewType = VK_IMAGE_VIEW_TYPE_2D, .format = image_info.format, .subresourceRange = { - .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, + .aspectMask = anv_image_from_handle(*img)->aspects, .baseMipLevel = 0, .levelCount = 1, .baseArrayLayer = 0, @@ -177,7 +179,16 @@ blit2d_bind_src(struct anv_cmd_buffer *cmd_buffer, rect->src_x, rect->src_y, &offset, &rect->src_x, &rect->src_y); - create_iview(cmd_buffer, src, offset, VK_IMAGE_USAGE_SAMPLED_BIT, + VkImageUsageFlags usage = VK_IMAGE_USAGE_SAMPLED_BIT; + + /* W-tiled images must be stencil-formatted. Outside of meta, + * a stencil image has this usage bit set. Adding it here + * ensures the ISL surface is created correctly. + */ + if (src->tiling == ISL_TILING_W) + usage |= VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT; + + create_iview(cmd_buffer, src, offset, usage, rect->src_x + rect->width, rect->src_y + rect->height, &tmp->image, &tmp->iview); |