From b57c72d9646c3f7ef595379328e5b7d64d8e94dc Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Thu, 14 Jan 2016 07:59:37 -0800 Subject: [PATCH] vulkan-1.0.0: Rework blits to use four offsets --- include/vulkan/vulkan.h | 6 ++---- src/vulkan/anv_dump.c | 16 ++++++---------- src/vulkan/anv_meta.c | 31 +++++++++++++++++++++++-------- 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/include/vulkan/vulkan.h b/include/vulkan/vulkan.h index 0aefccf1d5c..36459b14c58 100644 --- a/include/vulkan/vulkan.h +++ b/include/vulkan/vulkan.h @@ -2076,11 +2076,9 @@ typedef struct VkImageCopy { typedef struct VkImageBlit { VkImageSubresourceLayers srcSubresource; - VkOffset3D srcOffset; - VkExtent3D srcExtent; + VkOffset3D srcOffsets[2]; VkImageSubresourceLayers dstSubresource; - VkOffset3D dstOffset; - VkExtent3D dstExtent; + VkOffset3D dstOffsets[2]; } VkImageBlit; typedef struct VkBufferImageCopy { diff --git a/src/vulkan/anv_dump.c b/src/vulkan/anv_dump.c index 7aef32b8648..2a747d46924 100644 --- a/src/vulkan/anv_dump.c +++ b/src/vulkan/anv_dump.c @@ -108,11 +108,9 @@ anv_dump_image_to_ppm(struct anv_device *device, .baseArrayLayer = array_layer, .layerCount = 1, }, - .srcOffset = (VkOffset3D) { 0, 0, 0 }, - .srcExtent = (VkExtent3D) { - extent.width, - extent.height, - 1 + .srcOffsets = { + { 0, 0, 0 }, + { extent.width, extent.height, 1 }, }, .dstSubresource = { .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, @@ -120,11 +118,9 @@ anv_dump_image_to_ppm(struct anv_device *device, .baseArrayLayer = 0, .layerCount = 1, }, - .dstOffset = (VkOffset3D) { 0, 0, 0 }, - .dstExtent = (VkExtent3D) { - extent.width, - extent.height, - 1 + .dstOffsets = { + { 0, 0, 0 }, + { extent.width, extent.height, 1 }, }, }, VK_FILTER_NEAREST); diff --git a/src/vulkan/anv_meta.c b/src/vulkan/anv_meta.c index aa5fd0488c0..3cbb3a65f22 100644 --- a/src/vulkan/anv_meta.c +++ b/src/vulkan/anv_meta.c @@ -1047,20 +1047,37 @@ void anv_CmdBlitImage( cmd_buffer); const VkOffset3D dest_offset = { - .x = pRegions[r].dstOffset.x, - .y = pRegions[r].dstOffset.y, + .x = pRegions[r].dstOffsets[0].x, + .y = pRegions[r].dstOffsets[0].y, .z = 0, }; + if (pRegions[r].dstOffsets[1].x < pRegions[r].dstOffsets[0].x || + pRegions[r].dstOffsets[1].y < pRegions[r].dstOffsets[0].y || + pRegions[r].srcOffsets[1].x < pRegions[r].srcOffsets[0].x || + pRegions[r].srcOffsets[1].y < pRegions[r].srcOffsets[0].y) + anv_finishme("FINISHME: Allow flipping in blits"); + + const VkExtent3D dest_extent = { + .width = pRegions[r].dstOffsets[1].x - pRegions[r].dstOffsets[0].x, + .height = pRegions[r].dstOffsets[1].y - pRegions[r].dstOffsets[0].y, + }; + + const VkExtent3D src_extent = { + .width = pRegions[r].srcOffsets[1].x - pRegions[r].srcOffsets[0].x, + .height = pRegions[r].srcOffsets[1].y - pRegions[r].srcOffsets[0].y, + }; + const uint32_t dest_array_slice = meta_blit_get_dest_view_base_array_slice(dest_image, &pRegions[r].dstSubresource, - &pRegions[r].dstOffset); + &pRegions[r].dstOffsets[0]); if (pRegions[r].srcSubresource.layerCount > 1) anv_finishme("FINISHME: copy multiple array layers"); - if (pRegions[r].dstExtent.depth > 1) + if (pRegions[r].srcOffsets[0].z != pRegions[r].srcOffsets[1].z || + pRegions[r].dstOffsets[0].z != pRegions[r].dstOffsets[1].z) anv_finishme("FINISHME: copy multiple depth layers"); struct anv_image_view dest_iview; @@ -1082,11 +1099,9 @@ void anv_CmdBlitImage( meta_emit_blit(cmd_buffer, src_image, &src_iview, - pRegions[r].srcOffset, - pRegions[r].srcExtent, + pRegions[r].srcOffsets[0], src_extent, dest_image, &dest_iview, - dest_offset, - pRegions[r].dstExtent, + dest_offset, dest_extent, filter); } -- 2.30.2