Display image barriers in texture usage dropdown and timeline bar

This commit is contained in:
baldurk
2016-06-22 19:04:08 +02:00
parent af3e57e79c
commit 494627c299
7 changed files with 55 additions and 10 deletions
+2
View File
@@ -399,6 +399,8 @@ enum ResourceUsage
eUsage_Copy,
eUsage_CopySrc,
eUsage_CopyDst,
eUsage_Barrier,
};
enum DrawcallFlags
+2
View File
@@ -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);
+2
View File
@@ -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);
+8 -6
View File
@@ -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;
}
}
+6
View File
@@ -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";
}
}
+28 -4
View File
@@ -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;