Mesa (main): v3dv: implement vkCmdBlitImage2KHR
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Jun 21 06:14:51 UTC 2021
Module: Mesa
Branch: main
Commit: 06a9a3ead56552f66139c08dc31cf312008ae0bd
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=06a9a3ead56552f66139c08dc31cf312008ae0bd
Author: Iago Toral Quiroga <itoral at igalia.com>
Date: Thu Jun 17 09:30:13 2021 +0200
v3dv: implement vkCmdBlitImage2KHR
The common Vulkan code will call this to implement vkCmdBlitImage.
Reviewed-by: Alejandro Piñeiro <apinheiro at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11443>
---
src/broadcom/vulkan/v3dv_meta_copy.c | 41 ++++++++++++++++++------------------
1 file changed, 20 insertions(+), 21 deletions(-)
diff --git a/src/broadcom/vulkan/v3dv_meta_copy.c b/src/broadcom/vulkan/v3dv_meta_copy.c
index 746bc622a07..5391e4da2d8 100644
--- a/src/broadcom/vulkan/v3dv_meta_copy.c
+++ b/src/broadcom/vulkan/v3dv_meta_copy.c
@@ -931,7 +931,7 @@ blit_shader(struct v3dv_cmd_buffer *cmd_buffer,
VkFormat src_format,
VkColorComponentFlags cmask,
VkComponentMapping *cswizzle,
- const VkImageBlit *region,
+ const VkImageBlit2KHR *region,
VkFilter filter,
bool dst_is_padded_image);
@@ -1175,7 +1175,8 @@ copy_image_to_buffer_blit(struct v3dv_cmd_buffer *cmd_buffer,
* image, but that we need to blit to a S8D24 destination (the only
* stencil format we support).
*/
- const VkImageBlit blit_region = {
+ const VkImageBlit2KHR blit_region = {
+ .sType = VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR,
.srcSubresource = {
.aspectMask = copy_aspect,
.mipLevel = region->imageSubresource.mipLevel,
@@ -1921,7 +1922,8 @@ copy_image_blit(struct v3dv_cmd_buffer *cmd_buffer,
dst_start.z + region->extent.depth,
};
- const VkImageBlit blit_region = {
+ const VkImageBlit2KHR blit_region = {
+ .sType = VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR,
.srcSubresource = region->srcSubresource,
.srcOffsets = { src_start, src_end },
.dstSubresource = region->dstSubresource,
@@ -3808,7 +3810,8 @@ copy_buffer_to_image_blit(struct v3dv_cmd_buffer *cmd_buffer,
* image, but that we need to blit to a S8D24 destination (the only
* stencil format we support).
*/
- const VkImageBlit blit_region = {
+ const VkImageBlit2KHR blit_region = {
+ .sType = VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR,
.srcSubresource = {
.aspectMask = aspect,
.mipLevel = 0,
@@ -4140,7 +4143,7 @@ static bool
blit_tfu(struct v3dv_cmd_buffer *cmd_buffer,
struct v3dv_image *dst,
struct v3dv_image *src,
- const VkImageBlit *region)
+ const VkImageBlit2KHR *region)
{
assert(dst->samples == VK_SAMPLE_COUNT_1_BIT);
assert(src->samples == VK_SAMPLE_COUNT_1_BIT);
@@ -5123,7 +5126,7 @@ blit_shader(struct v3dv_cmd_buffer *cmd_buffer,
VkFormat src_format,
VkColorComponentFlags cmask,
VkComponentMapping *cswizzle,
- const VkImageBlit *_region,
+ const VkImageBlit2KHR *_region,
VkFilter filter,
bool dst_is_padded_image)
{
@@ -5141,7 +5144,7 @@ blit_shader(struct v3dv_cmd_buffer *cmd_buffer,
if (src->tiling == VK_IMAGE_TILING_LINEAR && src->type != VK_IMAGE_TYPE_1D)
return false;
- VkImageBlit region = *_region;
+ VkImageBlit2KHR region = *_region;
/* Rewrite combined D/S blits to compatible color blits */
if (vk_format_is_depth_or_stencil(dst_format)) {
assert(src_format == dst_format);
@@ -5533,18 +5536,12 @@ fail:
}
VKAPI_ATTR void VKAPI_CALL
-v3dv_CmdBlitImage(VkCommandBuffer commandBuffer,
- VkImage srcImage,
- VkImageLayout srcImageLayout,
- VkImage dstImage,
- VkImageLayout dstImageLayout,
- uint32_t regionCount,
- const VkImageBlit* pRegions,
- VkFilter filter)
+v3dv_CmdBlitImage2KHR(VkCommandBuffer commandBuffer,
+ const VkBlitImageInfo2KHR *pBlitImageInfo)
{
V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer);
- V3DV_FROM_HANDLE(v3dv_image, src, srcImage);
- V3DV_FROM_HANDLE(v3dv_image, dst, dstImage);
+ V3DV_FROM_HANDLE(v3dv_image, src, pBlitImageInfo->srcImage);
+ V3DV_FROM_HANDLE(v3dv_image, dst, pBlitImageInfo->dstImage);
/* This command can only happen outside a render pass */
assert(cmd_buffer->state.pass == NULL);
@@ -5557,14 +5554,15 @@ v3dv_CmdBlitImage(VkCommandBuffer commandBuffer,
/* We don't export VK_FORMAT_FEATURE_BLIT_DST_BIT on compressed formats */
assert(!vk_format_is_compressed(dst->vk_format));
- for (uint32_t i = 0; i < regionCount; i++) {
- if (blit_tfu(cmd_buffer, dst, src, &pRegions[i]))
+ for (uint32_t i = 0; i < pBlitImageInfo->regionCount; i++) {
+ if (blit_tfu(cmd_buffer, dst, src, &pBlitImageInfo->pRegions[i]))
continue;
if (blit_shader(cmd_buffer,
dst, dst->vk_format,
src, src->vk_format,
0, NULL,
- &pRegions[i], filter, true)) {
+ &pBlitImageInfo->pRegions[i],
+ pBlitImageInfo->filter, true)) {
continue;
}
unreachable("Unsupported blit operation");
@@ -5715,7 +5713,8 @@ resolve_image_blit(struct v3dv_cmd_buffer *cmd_buffer,
struct v3dv_image *src,
const VkImageResolve *region)
{
- const VkImageBlit blit_region = {
+ const VkImageBlit2KHR blit_region = {
+ .sType = VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR,
.srcSubresource = region->srcSubresource,
.srcOffsets = {
region->srcOffset,
More information about the mesa-commit
mailing list