Implement replay-side resource tracking for OpenGL

* This means that the timeline bar will show use as read/write/clear etc
  and that right clicking on textures in the texture viewer will show
  the events where that texture is used for rendering, for reading, and
  so on.
This commit is contained in:
baldurk
2015-04-11 11:03:19 +01:00
parent e0e345abd7
commit a5cc19ccc6
19 changed files with 885 additions and 336 deletions
+103 -47
View File
@@ -316,30 +316,34 @@ namespace renderdoc
{
None,
IA_VB,
IA_IB,
VertexBuffer,
IndexBuffer,
VS_CB,
HS_CB,
DS_CB,
GS_CB,
PS_CB,
CS_CB,
VS_Constants,
HS_Constants,
DS_Constants,
GS_Constants,
PS_Constants,
CS_Constants,
SO,
VS_SRV,
HS_SRV,
DS_SRV,
GS_SRV,
PS_SRV,
CS_SRV,
VS_Resource,
HS_Resource,
DS_Resource,
GS_Resource,
PS_Resource,
CS_Resource,
CS_UAV,
PS_UAV,
VS_RWResource,
HS_RWResource,
DS_RWResource,
GS_RWResource,
PS_RWResource,
CS_RWResource,
OM_RTV,
OM_DSV,
ColourTarget,
DepthStencilTarget,
Clear,
@@ -561,44 +565,96 @@ namespace renderdoc
return "Unknown resource type";
}
public static string Str(this ResourceUsage usage)
public static string Str(this ResourceUsage usage, APIPipelineStateType apitype)
{
switch (usage)
if (apitype == APIPipelineStateType.D3D11)
{
case ResourceUsage.IA_VB: return "Vertex Buffer";
case ResourceUsage.IA_IB: return "Index Buffer";
switch (usage)
{
case ResourceUsage.VertexBuffer: return "Vertex Buffer";
case ResourceUsage.IndexBuffer: return "Index Buffer";
case ResourceUsage.VS_CB: return "VS - Constant Buffer";
case ResourceUsage.GS_CB: return "GS - Constant Buffer";
case ResourceUsage.HS_CB: return "HS - Constant Buffer";
case ResourceUsage.DS_CB: return "DS - Constant Buffer";
case ResourceUsage.CS_CB: return "CS - Constant Buffer";
case ResourceUsage.PS_CB: return "PS - Constant Buffer";
case ResourceUsage.VS_Constants: return "VS - Constant Buffer";
case ResourceUsage.GS_Constants: return "GS - Constant Buffer";
case ResourceUsage.HS_Constants: return "HS - Constant Buffer";
case ResourceUsage.DS_Constants: return "DS - Constant Buffer";
case ResourceUsage.CS_Constants: return "CS - Constant Buffer";
case ResourceUsage.PS_Constants: return "PS - Constant Buffer";
case ResourceUsage.SO: return "Stream Out";
case ResourceUsage.SO: return "Stream Out";
case ResourceUsage.VS_SRV: return "VS - Resource";
case ResourceUsage.GS_SRV: return "GS - Resource";
case ResourceUsage.HS_SRV: return "HS - Resource";
case ResourceUsage.DS_SRV: return "DS - Resource";
case ResourceUsage.CS_SRV: return "CS - Resource";
case ResourceUsage.PS_SRV: return "PS - Resource";
case ResourceUsage.VS_Resource: return "VS - Resource";
case ResourceUsage.GS_Resource: return "GS - Resource";
case ResourceUsage.HS_Resource: return "HS - Resource";
case ResourceUsage.DS_Resource: return "DS - Resource";
case ResourceUsage.CS_Resource: return "CS - Resource";
case ResourceUsage.PS_Resource: return "PS - Resource";
case ResourceUsage.CS_UAV: return "CS - UAV";
case ResourceUsage.PS_UAV: return "PS - UAV";
case ResourceUsage.VS_RWResource: return "VS - UAV";
case ResourceUsage.HS_RWResource: return "HS - UAV";
case ResourceUsage.DS_RWResource: return "DS - UAV";
case ResourceUsage.GS_RWResource: return "GS - UAV";
case ResourceUsage.PS_RWResource: return "PS - UAV";
case ResourceUsage.CS_RWResource: return "CS - UAV";
case ResourceUsage.OM_RTV: return "Rendertarget";
case ResourceUsage.OM_DSV: return "Depthstencil";
case ResourceUsage.ColourTarget: return "Rendertarget";
case ResourceUsage.DepthStencilTarget: return "Depthstencil";
case ResourceUsage.Clear: return "Clear";
case ResourceUsage.Clear: return "Clear";
case ResourceUsage.GenMips: return "Generate Mips";
case ResourceUsage.Resolve: return "Resolve";
case ResourceUsage.ResolveSrc: return "Resolve - Source";
case ResourceUsage.ResolveDst: return "Resolve - Dest";
case ResourceUsage.Copy: return "Copy";
case ResourceUsage.CopySrc: return "Copy - Source";
case ResourceUsage.CopyDst: return "Copy - Dest";
case ResourceUsage.GenMips: return "Generate Mips";
case ResourceUsage.Resolve: return "Resolve";
case ResourceUsage.ResolveSrc: return "Resolve - Source";
case ResourceUsage.ResolveDst: return "Resolve - Dest";
case ResourceUsage.Copy: return "Copy";
case ResourceUsage.CopySrc: return "Copy - Source";
case ResourceUsage.CopyDst: return "Copy - Dest";
}
}
else if (apitype == APIPipelineStateType.OpenGL)
{
switch (usage)
{
case ResourceUsage.VertexBuffer: return "Vertex Buffer";
case ResourceUsage.IndexBuffer: return "Index Buffer";
case ResourceUsage.VS_Constants: return "VS - Uniform Buffer";
case ResourceUsage.GS_Constants: return "GS - Uniform Buffer";
case ResourceUsage.HS_Constants: return "HS - Uniform Buffer";
case ResourceUsage.DS_Constants: return "DS - Uniform Buffer";
case ResourceUsage.CS_Constants: return "CS - Uniform Buffer";
case ResourceUsage.PS_Constants: return "PS - Uniform Buffer";
case ResourceUsage.SO: return "Transform Feedback";
case ResourceUsage.VS_Resource: return "VS - Texture";
case ResourceUsage.GS_Resource: return "GS - Texture";
case ResourceUsage.HS_Resource: return "HS - Texture";
case ResourceUsage.DS_Resource: return "DS - Texture";
case ResourceUsage.CS_Resource: return "CS - Texture";
case ResourceUsage.PS_Resource: return "PS - Texture";
case ResourceUsage.VS_RWResource: return "VS - Image/SSBO";
case ResourceUsage.HS_RWResource: return "HS - Image/SSBO";
case ResourceUsage.DS_RWResource: return "DS - Image/SSBO";
case ResourceUsage.GS_RWResource: return "GS - Image/SSBO";
case ResourceUsage.PS_RWResource: return "PS - Image/SSBO";
case ResourceUsage.CS_RWResource: return "CS - Image/SSBO";
case ResourceUsage.ColourTarget: return "FBO Colour";
case ResourceUsage.DepthStencilTarget: return "FBO Depthstencil";
case ResourceUsage.Clear: return "Clear";
case ResourceUsage.GenMips: return "Generate Mips";
case ResourceUsage.Resolve: return "Framebuffer blit";
case ResourceUsage.ResolveSrc: return "Framebuffer blit - Source";
case ResourceUsage.ResolveDst: return "Framebuffer blit - Dest";
case ResourceUsage.Copy: return "Copy";
case ResourceUsage.CopySrc: return "Copy - Source";
case ResourceUsage.CopyDst: return "Copy - Dest";
}
}
return "Unknown Usage String";
+3 -3
View File
@@ -3051,9 +3051,9 @@ namespace renderdocui.Windows
ToolStripItem item = null;
if (start == end)
item = new ToolStripLabel("EID " + start + ": " + usage.Str());
item = new ToolStripLabel("EID " + start + ": " + usage.Str(m_Core.APIProps.pipelineType));
else
item = new ToolStripLabel("EID " + start + "-" + end + ": " + usage.Str());
item = new ToolStripLabel("EID " + start + "-" + end + ": " + usage.Str(m_Core.APIProps.pipelineType));
item.Click += new EventHandler(resourceContextItem_Click);
item.Tag = end;
@@ -3091,7 +3091,7 @@ namespace renderdocui.Windows
{
uint start = 0;
uint end = 0;
ResourceUsage us = ResourceUsage.IA_IB;
ResourceUsage us = ResourceUsage.IndexBuffer;
foreach (var u in usage)
{
+5 -4
View File
@@ -620,8 +620,9 @@ namespace renderdocui.Windows
if (u.eventID == s.draws[d].eventID)
{
// read/write
if (u.usage == ResourceUsage.CS_UAV ||
u.usage == ResourceUsage.PS_UAV ||
if (
((int)u.usage >= (int)ResourceUsage.VS_RWResource &&
(int)u.usage <= (int)ResourceUsage.CS_RWResource) ||
u.usage == ResourceUsage.GenMips ||
u.usage == ResourceUsage.Copy ||
u.usage == ResourceUsage.Resolve)
@@ -632,8 +633,8 @@ namespace renderdocui.Windows
}
// write
else if (u.usage == ResourceUsage.SO ||
u.usage == ResourceUsage.OM_DSV ||
u.usage == ResourceUsage.OM_RTV ||
u.usage == ResourceUsage.DepthStencilTarget ||
u.usage == ResourceUsage.ColourTarget ||
u.usage == ResourceUsage.CopyDst ||
u.usage == ResourceUsage.ResolveDst)
{