mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-08 01:54:15 +01:00
[dxvk] Add debug regions for internal operations
This commit is contained in:
parent
485090d039
commit
50f9630250
@ -277,6 +277,14 @@ namespace dxvk {
|
|||||||
cmdBuffer = DxvkCmdBuffer::ExecBuffer;
|
cmdBuffer = DxvkCmdBuffer::ExecBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (unlikely(m_features.test(DxvkContextFeature::DebugUtils))) {
|
||||||
|
const char* dstName = bufferView->buffer()->info().debugName;
|
||||||
|
|
||||||
|
m_cmd->cmdBeginDebugUtilsLabel(cmdBuffer,
|
||||||
|
vk::makeLabel(0xf0dcdc, str::format("Clear view (",
|
||||||
|
dstName ? dstName : "unknown", ")").c_str()));
|
||||||
|
}
|
||||||
|
|
||||||
// Query pipeline objects to use for this clear operation
|
// Query pipeline objects to use for this clear operation
|
||||||
DxvkMetaClearPipeline pipeInfo = m_common->metaClear().getClearBufferPipeline(
|
DxvkMetaClearPipeline pipeInfo = m_common->metaClear().getClearBufferPipeline(
|
||||||
lookupFormatInfo(bufferView->info().format)->flags);
|
lookupFormatInfo(bufferView->info().format)->flags);
|
||||||
@ -319,6 +327,9 @@ namespace dxvk {
|
|||||||
VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
|
VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
|
||||||
VK_ACCESS_2_SHADER_WRITE_BIT);
|
VK_ACCESS_2_SHADER_WRITE_BIT);
|
||||||
|
|
||||||
|
if (unlikely(m_features.test(DxvkContextFeature::DebugUtils)))
|
||||||
|
m_cmd->cmdEndDebugUtilsLabel(cmdBuffer);
|
||||||
|
|
||||||
m_cmd->track(bufferView->buffer(), DxvkAccess::Write);
|
m_cmd->track(bufferView->buffer(), DxvkAccess::Write);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2608,6 +2619,16 @@ namespace dxvk {
|
|||||||
flushPendingAccesses(*dstView, DxvkAccess::Write);
|
flushPendingAccesses(*dstView, DxvkAccess::Write);
|
||||||
flushPendingAccesses(*srcView, DxvkAccess::Read);
|
flushPendingAccesses(*srcView, DxvkAccess::Read);
|
||||||
|
|
||||||
|
if (unlikely(m_features.test(DxvkContextFeature::DebugUtils))) {
|
||||||
|
const char* dstName = dstView->image()->info().debugName;
|
||||||
|
const char* srcName = srcView->image()->info().debugName;
|
||||||
|
|
||||||
|
m_cmd->cmdBeginDebugUtilsLabel(DxvkCmdBuffer::ExecBuffer,
|
||||||
|
vk::makeLabel(0xf0dcdc, str::format("Blit (",
|
||||||
|
dstName ? dstName : "unknown", ", ",
|
||||||
|
srcName ? srcName : "unknown", ")").c_str()));
|
||||||
|
}
|
||||||
|
|
||||||
VkImageLayout srcLayout = srcView->image()->pickLayout(srcIsDepthStencil
|
VkImageLayout srcLayout = srcView->image()->pickLayout(srcIsDepthStencil
|
||||||
? VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
|
? VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
|
||||||
: VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
|
: VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
|
||||||
@ -2744,6 +2765,9 @@ namespace dxvk {
|
|||||||
VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,
|
VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,
|
||||||
VK_ACCESS_2_SHADER_READ_BIT);
|
VK_ACCESS_2_SHADER_READ_BIT);
|
||||||
|
|
||||||
|
if (unlikely(m_features.test(DxvkContextFeature::DebugUtils)))
|
||||||
|
m_cmd->cmdEndDebugUtilsLabel(DxvkCmdBuffer::ExecBuffer);
|
||||||
|
|
||||||
m_cmd->track(dstView->image(), DxvkAccess::Write);
|
m_cmd->track(dstView->image(), DxvkAccess::Write);
|
||||||
m_cmd->track(srcView->image(), DxvkAccess::Read);
|
m_cmd->track(srcView->image(), DxvkAccess::Read);
|
||||||
m_cmd->track(std::move(sampler));
|
m_cmd->track(std::move(sampler));
|
||||||
@ -2974,6 +2998,16 @@ namespace dxvk {
|
|||||||
|
|
||||||
flushPendingAccesses(*image, vk::makeSubresourceRange(imageSubresource), DxvkAccess::Write);
|
flushPendingAccesses(*image, vk::makeSubresourceRange(imageSubresource), DxvkAccess::Write);
|
||||||
|
|
||||||
|
if (unlikely(m_features.test(DxvkContextFeature::DebugUtils))) {
|
||||||
|
const char* dstName = image->info().debugName;
|
||||||
|
const char* srcName = buffer->info().debugName;
|
||||||
|
|
||||||
|
m_cmd->cmdBeginDebugUtilsLabel(DxvkCmdBuffer::ExecBuffer,
|
||||||
|
vk::makeLabel(0xf0dcdc, str::format("Upload image (",
|
||||||
|
dstName ? dstName : "unknown", ", ",
|
||||||
|
srcName ? srcName : "unknown", ")").c_str()));
|
||||||
|
}
|
||||||
|
|
||||||
auto formatInfo = lookupFormatInfo(bufferFormat);
|
auto formatInfo = lookupFormatInfo(bufferFormat);
|
||||||
|
|
||||||
if (formatInfo->flags.test(DxvkFormatFlag::MultiPlane)) {
|
if (formatInfo->flags.test(DxvkFormatFlag::MultiPlane)) {
|
||||||
@ -3182,6 +3216,9 @@ namespace dxvk {
|
|||||||
VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,
|
VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,
|
||||||
VK_ACCESS_2_SHADER_READ_BIT);
|
VK_ACCESS_2_SHADER_READ_BIT);
|
||||||
|
|
||||||
|
if (unlikely(m_features.test(DxvkContextFeature::DebugUtils)))
|
||||||
|
m_cmd->cmdEndDebugUtilsLabel(DxvkCmdBuffer::ExecBuffer);
|
||||||
|
|
||||||
m_cmd->track(image, DxvkAccess::Write);
|
m_cmd->track(image, DxvkAccess::Write);
|
||||||
m_cmd->track(buffer, DxvkAccess::Read);
|
m_cmd->track(buffer, DxvkAccess::Read);
|
||||||
}
|
}
|
||||||
@ -3260,6 +3297,16 @@ namespace dxvk {
|
|||||||
|
|
||||||
flushPendingAccesses(*image, vk::makeSubresourceRange(imageSubresource), DxvkAccess::Read);
|
flushPendingAccesses(*image, vk::makeSubresourceRange(imageSubresource), DxvkAccess::Read);
|
||||||
|
|
||||||
|
if (unlikely(m_features.test(DxvkContextFeature::DebugUtils))) {
|
||||||
|
const char* dstName = buffer->info().debugName;
|
||||||
|
const char* srcName = image->info().debugName;
|
||||||
|
|
||||||
|
m_cmd->cmdBeginDebugUtilsLabel(DxvkCmdBuffer::ExecBuffer,
|
||||||
|
vk::makeLabel(0xf0dcdc, str::format("Readback image (",
|
||||||
|
dstName ? dstName : "unknown", ", ",
|
||||||
|
srcName ? srcName : "unknown", ")").c_str()));
|
||||||
|
}
|
||||||
|
|
||||||
auto formatInfo = lookupFormatInfo(bufferFormat);
|
auto formatInfo = lookupFormatInfo(bufferFormat);
|
||||||
|
|
||||||
if (formatInfo->flags.test(DxvkFormatFlag::MultiPlane)) {
|
if (formatInfo->flags.test(DxvkFormatFlag::MultiPlane)) {
|
||||||
@ -3397,6 +3444,9 @@ namespace dxvk {
|
|||||||
vk::makeSubresourceRange(imageSubresource), imageLayout,
|
vk::makeSubresourceRange(imageSubresource), imageLayout,
|
||||||
VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_READ_BIT);
|
VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_READ_BIT);
|
||||||
|
|
||||||
|
if (unlikely(m_features.test(DxvkContextFeature::DebugUtils)))
|
||||||
|
m_cmd->cmdEndDebugUtilsLabel(DxvkCmdBuffer::ExecBuffer);
|
||||||
|
|
||||||
m_cmd->track(buffer, DxvkAccess::Write);
|
m_cmd->track(buffer, DxvkAccess::Write);
|
||||||
m_cmd->track(image, DxvkAccess::Read);
|
m_cmd->track(image, DxvkAccess::Read);
|
||||||
}
|
}
|
||||||
@ -3429,6 +3479,13 @@ namespace dxvk {
|
|||||||
|
|
||||||
flushPendingAccesses(*imageView->image(), imageView->imageSubresources(), DxvkAccess::Write);
|
flushPendingAccesses(*imageView->image(), imageView->imageSubresources(), DxvkAccess::Write);
|
||||||
|
|
||||||
|
if (unlikely(m_features.test(DxvkContextFeature::DebugUtils))) {
|
||||||
|
const char* dstName = imageView->image()->info().debugName;
|
||||||
|
|
||||||
|
m_cmd->cmdBeginDebugUtilsLabel(DxvkCmdBuffer::ExecBuffer, vk::makeLabel(0xf0dcdc,
|
||||||
|
str::format("Clear view (", dstName ? dstName : "unknown", ")").c_str()));
|
||||||
|
}
|
||||||
|
|
||||||
clearLayout = (imageView->info().aspects & VK_IMAGE_ASPECT_COLOR_BIT)
|
clearLayout = (imageView->info().aspects & VK_IMAGE_ASPECT_COLOR_BIT)
|
||||||
? imageView->pickLayout(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL)
|
? imageView->pickLayout(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL)
|
||||||
: imageView->pickLayout(VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
|
: imageView->pickLayout(VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
|
||||||
@ -3505,6 +3562,9 @@ namespace dxvk {
|
|||||||
*imageView->image(), imageView->imageSubresources(),
|
*imageView->image(), imageView->imageSubresources(),
|
||||||
clearLayout, clearStages, clearAccess);
|
clearLayout, clearStages, clearAccess);
|
||||||
|
|
||||||
|
if (unlikely(m_features.test(DxvkContextFeature::DebugUtils)))
|
||||||
|
m_cmd->cmdEndDebugUtilsLabel(DxvkCmdBuffer::ExecBuffer);
|
||||||
|
|
||||||
m_cmd->track(imageView->image(), DxvkAccess::Write);
|
m_cmd->track(imageView->image(), DxvkAccess::Write);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3526,6 +3586,13 @@ namespace dxvk {
|
|||||||
cmdBuffer = DxvkCmdBuffer::ExecBuffer;
|
cmdBuffer = DxvkCmdBuffer::ExecBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (unlikely(m_features.test(DxvkContextFeature::DebugUtils))) {
|
||||||
|
const char* dstName = imageView->image()->info().debugName;
|
||||||
|
|
||||||
|
m_cmd->cmdBeginDebugUtilsLabel(cmdBuffer, vk::makeLabel(0xf0dcdc,
|
||||||
|
str::format("Clear view (", dstName ? dstName : "unknown", ")").c_str()));
|
||||||
|
}
|
||||||
|
|
||||||
addImageLayoutTransition(*imageView->image(), imageView->imageSubresources(),
|
addImageLayoutTransition(*imageView->image(), imageView->imageSubresources(),
|
||||||
VK_IMAGE_LAYOUT_GENERAL, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_WRITE_BIT,
|
VK_IMAGE_LAYOUT_GENERAL, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT, VK_ACCESS_2_SHADER_WRITE_BIT,
|
||||||
imageView->image()->isFullSubresource(vk::pickSubresourceLayers(imageView->imageSubresources(), 0), extent));
|
imageView->image()->isFullSubresource(vk::pickSubresourceLayers(imageView->imageSubresources(), 0), extent));
|
||||||
@ -3582,6 +3649,9 @@ namespace dxvk {
|
|||||||
VK_IMAGE_LAYOUT_GENERAL, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
|
VK_IMAGE_LAYOUT_GENERAL, VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
|
||||||
VK_ACCESS_2_SHADER_WRITE_BIT);
|
VK_ACCESS_2_SHADER_WRITE_BIT);
|
||||||
|
|
||||||
|
if (unlikely(m_features.test(DxvkContextFeature::DebugUtils)))
|
||||||
|
m_cmd->cmdEndDebugUtilsLabel(cmdBuffer);
|
||||||
|
|
||||||
m_cmd->track(imageView->image(), DxvkAccess::Write);
|
m_cmd->track(imageView->image(), DxvkAccess::Write);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3694,6 +3764,16 @@ namespace dxvk {
|
|||||||
|
|
||||||
this->invalidateState();
|
this->invalidateState();
|
||||||
|
|
||||||
|
if (unlikely(m_features.test(DxvkContextFeature::DebugUtils))) {
|
||||||
|
const char* dstName = dstImage->info().debugName;
|
||||||
|
const char* srcName = srcImage->info().debugName;
|
||||||
|
|
||||||
|
m_cmd->cmdBeginDebugUtilsLabel(DxvkCmdBuffer::ExecBuffer,
|
||||||
|
vk::makeLabel(0xf0dcdc, str::format("Copy image (",
|
||||||
|
dstName ? dstName : "unknown", ", ",
|
||||||
|
srcName ? srcName : "unknown", ")").c_str()));
|
||||||
|
}
|
||||||
|
|
||||||
auto dstSubresourceRange = vk::makeSubresourceRange(dstSubresource);
|
auto dstSubresourceRange = vk::makeSubresourceRange(dstSubresource);
|
||||||
auto srcSubresourceRange = vk::makeSubresourceRange(srcSubresource);
|
auto srcSubresourceRange = vk::makeSubresourceRange(srcSubresource);
|
||||||
|
|
||||||
@ -3846,6 +3926,9 @@ namespace dxvk {
|
|||||||
*dstImage, dstSubresourceRange,
|
*dstImage, dstSubresourceRange,
|
||||||
dstLayout, dstStages, dstAccess);
|
dstLayout, dstStages, dstAccess);
|
||||||
|
|
||||||
|
if (unlikely(m_features.test(DxvkContextFeature::DebugUtils)))
|
||||||
|
m_cmd->cmdEndDebugUtilsLabel(DxvkCmdBuffer::ExecBuffer);
|
||||||
|
|
||||||
m_cmd->track(dstImage, DxvkAccess::Write);
|
m_cmd->track(dstImage, DxvkAccess::Write);
|
||||||
m_cmd->track(srcImage, DxvkAccess::Read);
|
m_cmd->track(srcImage, DxvkAccess::Read);
|
||||||
}
|
}
|
||||||
@ -4153,6 +4236,16 @@ namespace dxvk {
|
|||||||
flushPendingAccesses(*dstImage, dstSubresourceRange, DxvkAccess::Write);
|
flushPendingAccesses(*dstImage, dstSubresourceRange, DxvkAccess::Write);
|
||||||
flushPendingAccesses(*srcImage, srcSubresourceRange, DxvkAccess::Read);
|
flushPendingAccesses(*srcImage, srcSubresourceRange, DxvkAccess::Read);
|
||||||
|
|
||||||
|
if (unlikely(m_features.test(DxvkContextFeature::DebugUtils))) {
|
||||||
|
const char* dstName = dstImage->info().debugName;
|
||||||
|
const char* srcName = srcImage->info().debugName;
|
||||||
|
|
||||||
|
m_cmd->cmdBeginDebugUtilsLabel(DxvkCmdBuffer::ExecBuffer,
|
||||||
|
vk::makeLabel(0xf0dcdc, str::format("Resolve DS (",
|
||||||
|
dstName ? dstName : "unknown", ", ",
|
||||||
|
srcName ? srcName : "unknown", ")").c_str()));
|
||||||
|
}
|
||||||
|
|
||||||
// Transition both images to usable layouts if necessary. For the source image we
|
// Transition both images to usable layouts if necessary. For the source image we
|
||||||
// can be fairly leniet since writable layouts are allowed for resolve attachments.
|
// can be fairly leniet since writable layouts are allowed for resolve attachments.
|
||||||
VkImageLayout dstLayout = dstImage->pickLayout(VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
|
VkImageLayout dstLayout = dstImage->pickLayout(VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
|
||||||
@ -4215,6 +4308,9 @@ namespace dxvk {
|
|||||||
VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT,
|
VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT,
|
||||||
VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT);
|
VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT);
|
||||||
|
|
||||||
|
if (unlikely(m_features.test(DxvkContextFeature::DebugUtils)))
|
||||||
|
m_cmd->cmdEndDebugUtilsLabel(DxvkCmdBuffer::ExecBuffer);
|
||||||
|
|
||||||
m_cmd->track(dstImage, DxvkAccess::Write);
|
m_cmd->track(dstImage, DxvkAccess::Write);
|
||||||
m_cmd->track(srcImage, DxvkAccess::Read);
|
m_cmd->track(srcImage, DxvkAccess::Read);
|
||||||
}
|
}
|
||||||
@ -4262,6 +4358,16 @@ namespace dxvk {
|
|||||||
flushPendingAccesses(*dstImage, dstSubresourceRange, DxvkAccess::Write);
|
flushPendingAccesses(*dstImage, dstSubresourceRange, DxvkAccess::Write);
|
||||||
flushPendingAccesses(*srcImage, srcSubresourceRange, DxvkAccess::Read);
|
flushPendingAccesses(*srcImage, srcSubresourceRange, DxvkAccess::Read);
|
||||||
|
|
||||||
|
if (unlikely(m_features.test(DxvkContextFeature::DebugUtils))) {
|
||||||
|
const char* dstName = dstImage->info().debugName;
|
||||||
|
const char* srcName = srcImage->info().debugName;
|
||||||
|
|
||||||
|
m_cmd->cmdBeginDebugUtilsLabel(DxvkCmdBuffer::ExecBuffer,
|
||||||
|
vk::makeLabel(0xf0dcdc, str::format("Resolve (",
|
||||||
|
dstName ? dstName : "unknown", ", ",
|
||||||
|
srcName ? srcName : "unknown", ")").c_str()));
|
||||||
|
}
|
||||||
|
|
||||||
// Discard the destination image if we're fully writing it,
|
// Discard the destination image if we're fully writing it,
|
||||||
// and transition the image layout if necessary
|
// and transition the image layout if necessary
|
||||||
bool doDiscard = dstImage->isFullSubresource(region.dstSubresource, region.extent);
|
bool doDiscard = dstImage->isFullSubresource(region.dstSubresource, region.extent);
|
||||||
@ -4416,6 +4522,9 @@ namespace dxvk {
|
|||||||
*dstImage, dstSubresourceRange,
|
*dstImage, dstSubresourceRange,
|
||||||
dstLayout, dstStages, dstAccess);
|
dstLayout, dstStages, dstAccess);
|
||||||
|
|
||||||
|
if (unlikely(m_features.test(DxvkContextFeature::DebugUtils)))
|
||||||
|
m_cmd->cmdEndDebugUtilsLabel(DxvkCmdBuffer::ExecBuffer);
|
||||||
|
|
||||||
m_cmd->track(dstImage, DxvkAccess::Write);
|
m_cmd->track(dstImage, DxvkAccess::Write);
|
||||||
m_cmd->track(srcImage, DxvkAccess::Read);
|
m_cmd->track(srcImage, DxvkAccess::Read);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user