#include "../vulkan_state.h" #include "../commands.h" #include "materialsystem/imaterialsystem.h" #include "tier0/platform.h" #include "tier1/utlvector.h" DECLARE_VULKAN_COMMAND(Blit) { CVkImage *pVkInputImage = (CVkImage*)VulkanGetObject(stInputImage, iCurrentFrame); CVkImage *pVkOutputImage = (CVkImage*)VulkanGetObject(stOutputImage, iCurrentFrame); VkImageBlit stBlit = { .srcSubresource = { .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, .layerCount = 1, }, .dstSubresource = { .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, .layerCount = 1, }, }; stBlit.srcOffsets[0].x = iSrcMin[0]; stBlit.srcOffsets[0].y = iSrcMin[1]; stBlit.srcOffsets[0].z = iSrcMin[2]; stBlit.srcOffsets[1].x = iSrcMax[0]; stBlit.srcOffsets[1].y = iSrcMax[1]; stBlit.srcOffsets[1].z = iSrcMax[2]; stBlit.dstOffsets[0].x = iDstMin[0]; stBlit.dstOffsets[0].y = iDstMin[1]; stBlit.dstOffsets[0].z = iDstMin[2]; stBlit.dstOffsets[1].x = iDstMax[0]; stBlit.dstOffsets[1].y = iDstMax[1]; stBlit.dstOffsets[1].z = iDstMax[2]; vkCmdBlitImage(hCommandBuffer, pVkInputImage->m_image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, pVkOutputImage->m_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &stBlit, VK_FILTER_NEAREST); } DECLARE_VULKAN_COMMAND(CopyBufferToImage) { VkBufferImageCopy2 r = { .sType = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2, .imageSubresource = { .aspectMask = ((CVkImage*)VulkanGetObject(stOutputImage, iCurrentFrame))->m_range.aspectMask, .layerCount = 1, }, .imageOffset = {iOffsetX, iOffsetY, iOffsetZ}, .imageExtent = {iImageX, iImageY, iImageZ}, }; VkCopyBufferToImageInfo2 c = { .sType = VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2, .srcBuffer = ((CVkBuffer*)pBuffer)->m_buffer, .dstImage = ((CVkImage*)VulkanGetObject(stOutputImage, iCurrentFrame))->m_image, .dstImageLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, .regionCount = 1, .pRegions = &r, }; vkCmdCopyBufferToImage2(hCommandBuffer, &c); }