mirror of
https://github.com/PancakeTAS/lsfg-vk.git
synced 2025-10-30 07:01:10 +00:00
parent
4ad1ea8523
commit
27eeea3d0c
3 changed files with 25 additions and 16 deletions
|
|
@ -186,15 +186,16 @@ namespace Layer {
|
||||||
const VkBufferMemoryBarrier* pBufferMemoryBarriers,
|
const VkBufferMemoryBarrier* pBufferMemoryBarriers,
|
||||||
uint32_t imageMemoryBarrierCount,
|
uint32_t imageMemoryBarrierCount,
|
||||||
const VkImageMemoryBarrier* pImageMemoryBarriers);
|
const VkImageMemoryBarrier* pImageMemoryBarriers);
|
||||||
/// Call to the original vkCmdCopyImage function.
|
/// Call to the original vkCmdBlitImage function.
|
||||||
void ovkCmdCopyImage(
|
void ovkCmdBlitImage(
|
||||||
VkCommandBuffer commandBuffer,
|
VkCommandBuffer commandBuffer,
|
||||||
VkImage srcImage,
|
VkImage srcImage,
|
||||||
VkImageLayout srcImageLayout,
|
VkImageLayout srcImageLayout,
|
||||||
VkImage dstImage,
|
VkImage dstImage,
|
||||||
VkImageLayout dstImageLayout,
|
VkImageLayout dstImageLayout,
|
||||||
uint32_t regionCount,
|
uint32_t regionCount,
|
||||||
const VkImageCopy* pRegions);
|
const VkImageBlit* pRegions,
|
||||||
|
VkFilter filter);
|
||||||
|
|
||||||
/// Call to the original vkAcquireNextImageKHR function.
|
/// Call to the original vkAcquireNextImageKHR function.
|
||||||
VkResult ovkAcquireNextImageKHR(
|
VkResult ovkAcquireNextImageKHR(
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ namespace {
|
||||||
PFN_vkGetDeviceQueue next_vkGetDeviceQueue{};
|
PFN_vkGetDeviceQueue next_vkGetDeviceQueue{};
|
||||||
PFN_vkQueueSubmit next_vkQueueSubmit{};
|
PFN_vkQueueSubmit next_vkQueueSubmit{};
|
||||||
PFN_vkCmdPipelineBarrier next_vkCmdPipelineBarrier{};
|
PFN_vkCmdPipelineBarrier next_vkCmdPipelineBarrier{};
|
||||||
PFN_vkCmdCopyImage next_vkCmdCopyImage{};
|
PFN_vkCmdBlitImage next_vkCmdBlitImage{};
|
||||||
PFN_vkAcquireNextImageKHR next_vkAcquireNextImageKHR{};
|
PFN_vkAcquireNextImageKHR next_vkAcquireNextImageKHR{};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
|
@ -195,7 +195,7 @@ namespace {
|
||||||
success &= initDeviceFunc(*pDevice, "vkGetDeviceQueue", &next_vkGetDeviceQueue);
|
success &= initDeviceFunc(*pDevice, "vkGetDeviceQueue", &next_vkGetDeviceQueue);
|
||||||
success &= initDeviceFunc(*pDevice, "vkQueueSubmit", &next_vkQueueSubmit);
|
success &= initDeviceFunc(*pDevice, "vkQueueSubmit", &next_vkQueueSubmit);
|
||||||
success &= initDeviceFunc(*pDevice, "vkCmdPipelineBarrier", &next_vkCmdPipelineBarrier);
|
success &= initDeviceFunc(*pDevice, "vkCmdPipelineBarrier", &next_vkCmdPipelineBarrier);
|
||||||
success &= initDeviceFunc(*pDevice, "vkCmdCopyImage", &next_vkCmdCopyImage);
|
success &= initDeviceFunc(*pDevice, "vkCmdBlitImage", &next_vkCmdBlitImage);
|
||||||
success &= initDeviceFunc(*pDevice, "vkAcquireNextImageKHR", &next_vkAcquireNextImageKHR);
|
success &= initDeviceFunc(*pDevice, "vkAcquireNextImageKHR", &next_vkAcquireNextImageKHR);
|
||||||
if (!success) {
|
if (!success) {
|
||||||
Log::error("layer", "Failed to get device function pointers");
|
Log::error("layer", "Failed to get device function pointers");
|
||||||
|
|
@ -635,19 +635,20 @@ void Layer::ovkCmdPipelineBarrier(
|
||||||
bufferMemoryBarrierCount, pBufferMemoryBarriers,
|
bufferMemoryBarrierCount, pBufferMemoryBarriers,
|
||||||
imageMemoryBarrierCount, pImageMemoryBarriers);
|
imageMemoryBarrierCount, pImageMemoryBarriers);
|
||||||
}
|
}
|
||||||
void Layer::ovkCmdCopyImage(
|
void Layer::ovkCmdBlitImage(
|
||||||
VkCommandBuffer commandBuffer,
|
VkCommandBuffer commandBuffer,
|
||||||
VkImage srcImage,
|
VkImage srcImage,
|
||||||
VkImageLayout srcImageLayout,
|
VkImageLayout srcImageLayout,
|
||||||
VkImage dstImage,
|
VkImage dstImage,
|
||||||
VkImageLayout dstImageLayout,
|
VkImageLayout dstImageLayout,
|
||||||
uint32_t regionCount,
|
uint32_t regionCount,
|
||||||
const VkImageCopy* pRegions) {
|
const VkImageBlit* pRegions,
|
||||||
Log::debug("vulkan2", "vkCmdCopyImage called for command buffer {:x}, src image {:x}, dst image {:x}",
|
VkFilter filter) {
|
||||||
|
Log::debug("vulkan2", "vkCmdBlitImage called for command buffer {:x}, src image {:x}, dst image {:x}",
|
||||||
reinterpret_cast<uintptr_t>(commandBuffer),
|
reinterpret_cast<uintptr_t>(commandBuffer),
|
||||||
reinterpret_cast<uintptr_t>(srcImage),
|
reinterpret_cast<uintptr_t>(srcImage),
|
||||||
reinterpret_cast<uintptr_t>(dstImage));
|
reinterpret_cast<uintptr_t>(dstImage));
|
||||||
next_vkCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
|
next_vkCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
VkResult Layer::ovkAcquireNextImageKHR(
|
VkResult Layer::ovkAcquireNextImageKHR(
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
#include <vulkan/vulkan_core.h>
|
||||||
|
|
||||||
using namespace Utils;
|
using namespace Utils;
|
||||||
|
|
||||||
|
|
@ -96,25 +97,31 @@ void Utils::copyImage(VkCommandBuffer buf,
|
||||||
0, nullptr, 0, nullptr,
|
0, nullptr, 0, nullptr,
|
||||||
static_cast<uint32_t>(barriers.size()), barriers.data());
|
static_cast<uint32_t>(barriers.size()), barriers.data());
|
||||||
|
|
||||||
const VkImageCopy imageCopy{
|
const VkImageBlit imageBlit{
|
||||||
.srcSubresource = {
|
.srcSubresource = {
|
||||||
.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
|
.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
|
||||||
.layerCount = 1
|
.layerCount = 1
|
||||||
},
|
},
|
||||||
|
.srcOffsets = {
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ static_cast<int32_t>(width), static_cast<int32_t>(height), 1 }
|
||||||
|
},
|
||||||
.dstSubresource = {
|
.dstSubresource = {
|
||||||
.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
|
.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
|
||||||
.layerCount = 1
|
.layerCount = 1
|
||||||
},
|
},
|
||||||
.extent = {
|
.dstOffsets = {
|
||||||
.width = width,
|
{ 0, 0, 0 },
|
||||||
.height = height,
|
{ static_cast<int32_t>(width), static_cast<int32_t>(height), 1 }
|
||||||
.depth = 1
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Layer::ovkCmdCopyImage(buf,
|
Layer::ovkCmdBlitImage(
|
||||||
|
buf,
|
||||||
src, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
|
src, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
|
||||||
dst, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
dst, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||||
1, &imageCopy);
|
1, &imageBlit,
|
||||||
|
VK_FILTER_NEAREST
|
||||||
|
);
|
||||||
|
|
||||||
if (makeSrcPresentable) {
|
if (makeSrcPresentable) {
|
||||||
const VkImageMemoryBarrier presentBarrier{
|
const VkImageMemoryBarrier presentBarrier{
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue