mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-30 03:30:10 +01:00
panvk: Implement VK_KHR_copy_commands2
This is just 2 versions of all the copy/blit entrypoings. The common Vulkan runtime code will implement the 1.0 versions in terms of the 2 versions. Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15436>
This commit is contained in:
parent
b573b22628
commit
f9b773a417
3 changed files with 38 additions and 64 deletions
|
|
@ -148,6 +148,7 @@ panvk_get_device_extensions(const struct panvk_physical_device *device,
|
|||
struct vk_device_extension_table *ext)
|
||||
{
|
||||
*ext = (struct vk_device_extension_table) {
|
||||
.KHR_copy_commands2 = true,
|
||||
#ifdef PANVK_USE_WSI_PLATFORM
|
||||
.KHR_swapchain = true,
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -134,21 +134,15 @@ panvk_meta_blit(struct panvk_cmd_buffer *cmdbuf,
|
|||
}
|
||||
|
||||
void
|
||||
panvk_per_arch(CmdBlitImage)(VkCommandBuffer commandBuffer,
|
||||
VkImage srcImage,
|
||||
VkImageLayout srcImageLayout,
|
||||
VkImage destImage,
|
||||
VkImageLayout destImageLayout,
|
||||
uint32_t regionCount,
|
||||
const VkImageBlit *pRegions,
|
||||
VkFilter filter)
|
||||
panvk_per_arch(CmdBlitImage2)(VkCommandBuffer commandBuffer,
|
||||
const VkBlitImageInfo2 *pBlitImageInfo)
|
||||
{
|
||||
VK_FROM_HANDLE(panvk_cmd_buffer, cmdbuf, commandBuffer);
|
||||
VK_FROM_HANDLE(panvk_image, src, srcImage);
|
||||
VK_FROM_HANDLE(panvk_image, dst, destImage);
|
||||
VK_FROM_HANDLE(panvk_image, src, pBlitImageInfo->srcImage);
|
||||
VK_FROM_HANDLE(panvk_image, dst, pBlitImageInfo->dstImage);
|
||||
|
||||
for (unsigned i = 0; i < regionCount; i++) {
|
||||
const VkImageBlit *region = &pRegions[i];
|
||||
for (unsigned i = 0; i < pBlitImageInfo->regionCount; i++) {
|
||||
const VkImageBlit2 *region = &pBlitImageInfo->pRegions[i];
|
||||
struct pan_blit_info info = {
|
||||
.src = {
|
||||
.planes[0].image = &src->pimage,
|
||||
|
|
@ -184,7 +178,7 @@ panvk_per_arch(CmdBlitImage)(VkCommandBuffer commandBuffer,
|
|||
region->dstSubresource.baseArrayLayer + region->dstSubresource.layerCount - 1,
|
||||
},
|
||||
},
|
||||
.nearest = filter == VK_FILTER_NEAREST,
|
||||
.nearest = pBlitImageInfo->filter == VK_FILTER_NEAREST,
|
||||
};
|
||||
|
||||
if (region->srcSubresource.aspectMask == VK_IMAGE_ASPECT_STENCIL_BIT)
|
||||
|
|
@ -202,13 +196,8 @@ panvk_per_arch(CmdBlitImage)(VkCommandBuffer commandBuffer,
|
|||
}
|
||||
|
||||
void
|
||||
panvk_per_arch(CmdResolveImage)(VkCommandBuffer commandBuffer,
|
||||
VkImage srcImage,
|
||||
VkImageLayout srcImageLayout,
|
||||
VkImage destImage,
|
||||
VkImageLayout destImageLayout,
|
||||
uint32_t regionCount,
|
||||
const VkImageResolve *pRegions)
|
||||
panvk_per_arch(CmdResolveImage2)(VkCommandBuffer commandBuffer,
|
||||
const VkResolveImageInfo2* pResolveImageInfo)
|
||||
{
|
||||
panvk_stub();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -654,7 +654,7 @@ static void
|
|||
panvk_meta_copy_img2img(struct panvk_cmd_buffer *cmdbuf,
|
||||
const struct panvk_image *src,
|
||||
const struct panvk_image *dst,
|
||||
const VkImageCopy *region)
|
||||
const VkImageCopy2 *region)
|
||||
{
|
||||
struct panfrost_device *pdev = &cmdbuf->device->physical_device->pdev;
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.fb.info;
|
||||
|
|
@ -849,20 +849,15 @@ panvk_meta_copy_img2img_init(struct panvk_physical_device *dev, bool is_ms)
|
|||
}
|
||||
|
||||
void
|
||||
panvk_per_arch(CmdCopyImage)(VkCommandBuffer commandBuffer,
|
||||
VkImage srcImage,
|
||||
VkImageLayout srcImageLayout,
|
||||
VkImage destImage,
|
||||
VkImageLayout destImageLayout,
|
||||
uint32_t regionCount,
|
||||
const VkImageCopy *pRegions)
|
||||
panvk_per_arch(CmdCopyImage2)(VkCommandBuffer commandBuffer,
|
||||
const VkCopyImageInfo2 *pCopyImageInfo)
|
||||
{
|
||||
VK_FROM_HANDLE(panvk_cmd_buffer, cmdbuf, commandBuffer);
|
||||
VK_FROM_HANDLE(panvk_image, dst, destImage);
|
||||
VK_FROM_HANDLE(panvk_image, src, srcImage);
|
||||
VK_FROM_HANDLE(panvk_image, dst, pCopyImageInfo->dstImage);
|
||||
VK_FROM_HANDLE(panvk_image, src, pCopyImageInfo->srcImage);
|
||||
|
||||
for (unsigned i = 0; i < regionCount; i++) {
|
||||
panvk_meta_copy_img2img(cmdbuf, src, dst, &pRegions[i]);
|
||||
for (unsigned i = 0; i < pCopyImageInfo->regionCount; i++) {
|
||||
panvk_meta_copy_img2img(cmdbuf, src, dst, &pCopyImageInfo->pRegions[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1121,7 +1116,7 @@ static void
|
|||
panvk_meta_copy_buf2img(struct panvk_cmd_buffer *cmdbuf,
|
||||
const struct panvk_buffer *buf,
|
||||
const struct panvk_image *img,
|
||||
const VkBufferImageCopy *region)
|
||||
const VkBufferImageCopy2 *region)
|
||||
{
|
||||
struct panfrost_device *pdev = &cmdbuf->device->physical_device->pdev;
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.fb.info;
|
||||
|
|
@ -1271,19 +1266,15 @@ panvk_meta_copy_buf2img_init(struct panvk_physical_device *dev)
|
|||
}
|
||||
|
||||
void
|
||||
panvk_per_arch(CmdCopyBufferToImage)(VkCommandBuffer commandBuffer,
|
||||
VkBuffer srcBuffer,
|
||||
VkImage destImage,
|
||||
VkImageLayout destImageLayout,
|
||||
uint32_t regionCount,
|
||||
const VkBufferImageCopy *pRegions)
|
||||
panvk_per_arch(CmdCopyBufferToImage2)(VkCommandBuffer commandBuffer,
|
||||
const VkCopyBufferToImageInfo2 *pCopyBufferToImageInfo)
|
||||
{
|
||||
VK_FROM_HANDLE(panvk_cmd_buffer, cmdbuf, commandBuffer);
|
||||
VK_FROM_HANDLE(panvk_buffer, buf, srcBuffer);
|
||||
VK_FROM_HANDLE(panvk_image, img, destImage);
|
||||
VK_FROM_HANDLE(panvk_buffer, buf, pCopyBufferToImageInfo->srcBuffer);
|
||||
VK_FROM_HANDLE(panvk_image, img, pCopyBufferToImageInfo->dstImage);
|
||||
|
||||
for (unsigned i = 0; i < regionCount; i++) {
|
||||
panvk_meta_copy_buf2img(cmdbuf, buf, img, &pRegions[i]);
|
||||
for (unsigned i = 0; i < pCopyBufferToImageInfo->regionCount; i++) {
|
||||
panvk_meta_copy_buf2img(cmdbuf, buf, img, &pCopyBufferToImageInfo->pRegions[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1587,7 +1578,7 @@ static void
|
|||
panvk_meta_copy_img2buf(struct panvk_cmd_buffer *cmdbuf,
|
||||
const struct panvk_buffer *buf,
|
||||
const struct panvk_image *img,
|
||||
const VkBufferImageCopy *region)
|
||||
const VkBufferImageCopy2 *region)
|
||||
{
|
||||
struct panfrost_device *pdev = &cmdbuf->device->physical_device->pdev;
|
||||
struct panvk_meta_copy_format_info key = {
|
||||
|
|
@ -1732,19 +1723,15 @@ panvk_meta_copy_img2buf_init(struct panvk_physical_device *dev)
|
|||
}
|
||||
|
||||
void
|
||||
panvk_per_arch(CmdCopyImageToBuffer)(VkCommandBuffer commandBuffer,
|
||||
VkImage srcImage,
|
||||
VkImageLayout srcImageLayout,
|
||||
VkBuffer destBuffer,
|
||||
uint32_t regionCount,
|
||||
const VkBufferImageCopy *pRegions)
|
||||
panvk_per_arch(CmdCopyImageToBuffer2)(VkCommandBuffer commandBuffer,
|
||||
const VkCopyImageToBufferInfo2 *pCopyImageToBufferInfo)
|
||||
{
|
||||
VK_FROM_HANDLE(panvk_cmd_buffer, cmdbuf, commandBuffer);
|
||||
VK_FROM_HANDLE(panvk_buffer, buf, destBuffer);
|
||||
VK_FROM_HANDLE(panvk_image, img, srcImage);
|
||||
VK_FROM_HANDLE(panvk_buffer, buf, pCopyImageToBufferInfo->dstBuffer);
|
||||
VK_FROM_HANDLE(panvk_image, img, pCopyImageToBufferInfo->srcImage);
|
||||
|
||||
for (unsigned i = 0; i < regionCount; i++) {
|
||||
panvk_meta_copy_img2buf(cmdbuf, buf, img, &pRegions[i]);
|
||||
for (unsigned i = 0; i < pCopyImageToBufferInfo->regionCount; i++) {
|
||||
panvk_meta_copy_img2buf(cmdbuf, buf, img, &pCopyImageToBufferInfo->pRegions[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1840,7 +1827,7 @@ static void
|
|||
panvk_meta_copy_buf2buf(struct panvk_cmd_buffer *cmdbuf,
|
||||
const struct panvk_buffer *src,
|
||||
const struct panvk_buffer *dst,
|
||||
const VkBufferCopy *region)
|
||||
const VkBufferCopy2 *region)
|
||||
{
|
||||
struct panfrost_device *pdev = &cmdbuf->device->physical_device->pdev;
|
||||
|
||||
|
|
@ -1889,18 +1876,15 @@ panvk_meta_copy_buf2buf(struct panvk_cmd_buffer *cmdbuf,
|
|||
}
|
||||
|
||||
void
|
||||
panvk_per_arch(CmdCopyBuffer)(VkCommandBuffer commandBuffer,
|
||||
VkBuffer srcBuffer,
|
||||
VkBuffer destBuffer,
|
||||
uint32_t regionCount,
|
||||
const VkBufferCopy *pRegions)
|
||||
panvk_per_arch(CmdCopyBuffer2)(VkCommandBuffer commandBuffer,
|
||||
const VkCopyBufferInfo2 *pCopyBufferInfo)
|
||||
{
|
||||
VK_FROM_HANDLE(panvk_cmd_buffer, cmdbuf, commandBuffer);
|
||||
VK_FROM_HANDLE(panvk_buffer, src, srcBuffer);
|
||||
VK_FROM_HANDLE(panvk_buffer, dst, destBuffer);
|
||||
VK_FROM_HANDLE(panvk_buffer, src, pCopyBufferInfo->srcBuffer);
|
||||
VK_FROM_HANDLE(panvk_buffer, dst, pCopyBufferInfo->dstBuffer);
|
||||
|
||||
for (unsigned i = 0; i < regionCount; i++) {
|
||||
panvk_meta_copy_buf2buf(cmdbuf, src, dst, &pRegions[i]);
|
||||
for (unsigned i = 0; i < pCopyBufferInfo->regionCount; i++) {
|
||||
panvk_meta_copy_buf2buf(cmdbuf, src, dst, &pCopyBufferInfo->pRegions[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue