mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-06 01:50:38 +00:00
Display image barriers in texture usage dropdown and timeline bar
This commit is contained in:
@@ -399,6 +399,8 @@ enum ResourceUsage
|
||||
eUsage_Copy,
|
||||
eUsage_CopySrc,
|
||||
eUsage_CopyDst,
|
||||
|
||||
eUsage_Barrier,
|
||||
};
|
||||
|
||||
enum DrawcallFlags
|
||||
|
||||
@@ -2521,6 +2521,8 @@ void WrappedVulkan::AddDrawcall(const FetchDrawcall &d, bool hasEvents)
|
||||
{
|
||||
VulkanDrawcallTreeNode node(draw);
|
||||
|
||||
node.resourceUsage.swap(m_BakedCmdBufferInfo[m_LastCmdBufferID].resourceUsage);
|
||||
|
||||
if(m_LastCmdBufferID != ResourceId())
|
||||
AddUsage(node, m_BakedCmdBufferInfo[m_LastCmdBufferID].debugMessages);
|
||||
|
||||
|
||||
@@ -331,6 +331,8 @@ private:
|
||||
vector<DebugMessage> debugMessages;
|
||||
list<VulkanDrawcallTreeNode *> drawStack;
|
||||
|
||||
vector<pair<ResourceId, EventUsage> > resourceUsage;
|
||||
|
||||
struct CmdBufferState
|
||||
{
|
||||
ResourceId pipeline;
|
||||
|
||||
@@ -1745,6 +1745,13 @@ bool WrappedVulkan::Serialise_vkCmdPipelineBarrier(
|
||||
ResourceId cmd = GetResID(commandBuffer);
|
||||
GetResourceManager()->RecordBarriers(m_BakedCmdBufferInfo[cmd].imgbarriers, m_ImageLayouts,
|
||||
(uint32_t)imgBarriers.size(), &imgBarriers[0]);
|
||||
|
||||
for(size_t i = 0; i < imgBarriers.size(); i++)
|
||||
{
|
||||
m_BakedCmdBufferInfo[cmdid].resourceUsage.push_back(
|
||||
std::make_pair(GetResourceManager()->GetNonDispWrapper(imgBarriers[i].image)->id,
|
||||
EventUsage(m_BakedCmdBufferInfo[cmdid].curEventID, eUsage_Barrier)));
|
||||
}
|
||||
}
|
||||
|
||||
SAFE_DELETE_ARRAY(memBarriers);
|
||||
|
||||
@@ -146,13 +146,15 @@ namespace renderdocui.Code
|
||||
{
|
||||
get
|
||||
{
|
||||
if (LogLoaded)
|
||||
{
|
||||
if (IsLogVK)
|
||||
return true;
|
||||
}
|
||||
return LogLoaded && IsLogVK;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
public bool SupportsBarriers
|
||||
{
|
||||
get
|
||||
{
|
||||
return LogLoaded && IsLogVK;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -403,6 +403,8 @@ namespace renderdoc
|
||||
Copy,
|
||||
CopySrc,
|
||||
CopyDst,
|
||||
|
||||
Barrier,
|
||||
};
|
||||
|
||||
[Flags]
|
||||
@@ -665,6 +667,8 @@ namespace renderdoc
|
||||
case ResourceUsage.Copy: return "Copy";
|
||||
case ResourceUsage.CopySrc: return "Copy - Source";
|
||||
case ResourceUsage.CopyDst: return "Copy - Dest";
|
||||
|
||||
case ResourceUsage.Barrier: return "Barrier";
|
||||
}
|
||||
}
|
||||
else if (apitype == APIPipelineStateType.OpenGL || apitype == APIPipelineStateType.Vulkan)
|
||||
@@ -712,6 +716,8 @@ namespace renderdoc
|
||||
case ResourceUsage.Copy: return "Copy";
|
||||
case ResourceUsage.CopySrc: return "Copy - Source";
|
||||
case ResourceUsage.CopyDst: return "Copy - Dest";
|
||||
|
||||
case ResourceUsage.Barrier: return "Barrier";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -153,8 +153,7 @@ namespace renderdocui.Windows
|
||||
using(var brush = new SolidBrush(col))
|
||||
g.FillPie(brush, x, y, width, height, 0.0f, 360.0f);
|
||||
}
|
||||
|
||||
if (type == 1 || type == 2 || type == 3 || type == 4)
|
||||
else
|
||||
{
|
||||
height += 2;
|
||||
width += 4;
|
||||
@@ -177,6 +176,10 @@ namespace renderdocui.Windows
|
||||
{
|
||||
uptri[0] = new PointF(x + width / 2.0f, y + height - 2);
|
||||
}
|
||||
if (type == 5)
|
||||
{
|
||||
update = false;
|
||||
}
|
||||
type = 1;
|
||||
}
|
||||
|
||||
@@ -599,7 +602,8 @@ namespace renderdocui.Windows
|
||||
{
|
||||
foreach (var u in m_HighlightUsage)
|
||||
{
|
||||
if (u.eventID == s.draws[d].eventID)
|
||||
if ((u.eventID == s.draws[d].eventID) ||
|
||||
(u.eventID < s.draws[d].eventID && s.draws[d].events.Length > 0 && u.eventID >= s.draws[d].events[0].eventID))
|
||||
{
|
||||
var barcol = Color.Black;
|
||||
|
||||
@@ -641,7 +645,8 @@ namespace renderdocui.Windows
|
||||
{
|
||||
foreach (var u in m_HighlightUsage)
|
||||
{
|
||||
if (u.eventID == s.draws[d].eventID)
|
||||
if ((u.eventID == s.draws[d].eventID) ||
|
||||
(u.eventID < s.draws[d].eventID && s.draws[d].events.Length > 0 && u.eventID >= s.draws[d].events[0].eventID))
|
||||
{
|
||||
// read/write
|
||||
if (
|
||||
@@ -671,6 +676,12 @@ namespace renderdocui.Windows
|
||||
DrawPip(g, Color.Silver, highlightBarRect, 1, d, s.draws.Count, start, widths[i], "");
|
||||
MarkWrite(s.draws[d].eventID);
|
||||
}
|
||||
// barrier
|
||||
else if (u.usage == ResourceUsage.Barrier)
|
||||
{
|
||||
DrawPip(g, Color.Tomato, highlightBarRect, 5, d, s.draws.Count, start, widths[i], "");
|
||||
MarkWrite(s.draws[d].eventID);
|
||||
}
|
||||
// read
|
||||
else
|
||||
{
|
||||
@@ -823,6 +834,19 @@ namespace renderdocui.Windows
|
||||
DrawPip(g, Color.Black, new RectangleF(barRect.X, barRect.Y - pipRadius, pipRadius * 2, pipRadius * 2), 2, 0, 1, 0.0f, 1.0f, "");
|
||||
DrawPip(g, Color.Silver, new RectangleF(barRect.X, barRect.Y - pipRadius, pipRadius * 2, pipRadius * 2), 1, 0, 1, 0.0f, 1.0f, "");
|
||||
|
||||
if (m_Core.CurPipelineState.SupportsBarriers)
|
||||
{
|
||||
barRect.X += pipRadius * 2;
|
||||
barRect.X += pipRadius;
|
||||
|
||||
g.DrawString(", Barriers ", barFont, Brushes.Black, barRect.X, barRect.Y + 2);
|
||||
barRect.X += (int)Math.Ceiling(g.MeasureString(", Barriers ", barFont).Width);
|
||||
barRect.X += pipRadius;
|
||||
|
||||
DrawPip(g, Color.Black, new RectangleF(barRect.X, barRect.Y - pipRadius, pipRadius * 2, pipRadius * 2), 2, 0, 1, 0.0f, 1.0f, "");
|
||||
DrawPip(g, Color.Tomato, new RectangleF(barRect.X, barRect.Y - pipRadius, pipRadius * 2, pipRadius * 2), 1, 0, 1, 0.0f, 1.0f, "");
|
||||
}
|
||||
|
||||
barRect.X += pipRadius * 2;
|
||||
barRect.X += pipRadius;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user