aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNanley Chery <[email protected]>2016-02-27 17:11:55 -0800
committerNanley Chery <[email protected]>2016-03-03 11:26:36 -0800
commit318b67d1578213b802443f06f767a1c9d6d00310 (patch)
tree3c5d91dac1b1e5ed8dbc289e1f029163bf3fe7f9 /src
parent96ff4d0679e9243d4df070cc0eaef41e1b9d742b (diff)
anv/meta: Use blitter API in do_buffer_copy()
v2: Keep pitch in units of bytes (Jason) Signed-off-by: Nanley Chery <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/intel/vulkan/anv_meta_blit.c94
1 files changed, 21 insertions, 73 deletions
diff --git a/src/intel/vulkan/anv_meta_blit.c b/src/intel/vulkan/anv_meta_blit.c
index 2e529eed0f8..bd1c9798823 100644
--- a/src/intel/vulkan/anv_meta_blit.c
+++ b/src/intel/vulkan/anv_meta_blit.c
@@ -563,81 +563,29 @@ do_buffer_copy(struct anv_cmd_buffer *cmd_buffer,
struct anv_bo *dest, uint64_t dest_offset,
int width, int height, int bs)
{
- VkDevice vk_device = anv_device_to_handle(cmd_buffer->device);
- VkFormat copy_format = vk_format_for_size(bs);
-
- VkImageCreateInfo image_info = {
- .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
- .imageType = VK_IMAGE_TYPE_2D,
- .format = copy_format,
- .extent = {
- .width = width,
- .height = height,
- .depth = 1,
- },
- .mipLevels = 1,
- .arrayLayers = 1,
- .samples = 1,
- .tiling = VK_IMAGE_TILING_LINEAR,
- .usage = 0,
- .flags = 0,
+ struct anv_meta_blit2d_surf b_src = {
+ .bo = src,
+ .tiling = ISL_TILING_LINEAR,
+ .base_offset = src_offset,
+ .bs = bs,
+ .pitch = width * bs,
};
-
- VkImage src_image;
- image_info.usage = VK_IMAGE_USAGE_SAMPLED_BIT;
- anv_CreateImage(vk_device, &image_info,
- &cmd_buffer->pool->alloc, &src_image);
-
- VkImage dest_image;
- image_info.usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
- anv_CreateImage(vk_device, &image_info,
- &cmd_buffer->pool->alloc, &dest_image);
-
- /* We could use a vk call to bind memory, but that would require
- * creating a dummy memory object etc. so there's really no point.
- */
- anv_image_from_handle(src_image)->bo = src;
- anv_image_from_handle(src_image)->offset = src_offset;
- anv_image_from_handle(dest_image)->bo = dest;
- anv_image_from_handle(dest_image)->offset = dest_offset;
-
- VkImageViewCreateInfo iview_info = {
- .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
- .image = 0, /* TEMPLATE */
- .viewType = VK_IMAGE_VIEW_TYPE_2D,
- .format = copy_format,
- .subresourceRange = {
- .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
- .baseMipLevel = 0,
- .levelCount = 1,
- .baseArrayLayer = 0,
- .layerCount = 1
- },
+ struct anv_meta_blit2d_surf b_dst = {
+ .bo = dest,
+ .tiling = ISL_TILING_LINEAR,
+ .base_offset = dest_offset,
+ .bs = bs,
+ .pitch = width * bs,
};
-
- struct anv_image_view src_iview;
- iview_info.image = src_image;
- anv_image_view_init(&src_iview, cmd_buffer->device,
- &iview_info, cmd_buffer, 0, VK_IMAGE_USAGE_SAMPLED_BIT);
-
- struct anv_image_view dest_iview;
- iview_info.image = dest_image;
- anv_image_view_init(&dest_iview, cmd_buffer->device,
- &iview_info, cmd_buffer, 0, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT);
-
- meta_emit_blit(cmd_buffer,
- anv_image_from_handle(src_image),
- &src_iview,
- (VkOffset3D) { 0, 0, 0 },
- (VkExtent3D) { width, height, 1 },
- anv_image_from_handle(dest_image),
- &dest_iview,
- (VkOffset3D) { 0, 0, 0 },
- (VkExtent3D) { width, height, 1 },
- VK_FILTER_NEAREST);
-
- anv_DestroyImage(vk_device, src_image, &cmd_buffer->pool->alloc);
- anv_DestroyImage(vk_device, dest_image, &cmd_buffer->pool->alloc);
+ struct anv_meta_blit2d_rect rect = {
+ .width = width,
+ .height = height,
+ };
+ anv_meta_blit2d(cmd_buffer,
+ &b_src,
+ &b_dst,
+ 1,
+ &rect);
}
void anv_CmdCopyBuffer(