Implement right click options to debug or hide failed events

This commit is contained in:
baldurk
2014-08-03 15:54:40 +01:00
parent b230be570f
commit 6fa46b359e
3 changed files with 148 additions and 33 deletions
+37 -2
View File
@@ -28,6 +28,7 @@
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
TreelistView.TreeListColumn treeListColumn1 = ((TreelistView.TreeListColumn)(new TreelistView.TreeListColumn("EID", "EID")));
TreelistView.TreeListColumn treeListColumn2 = ((TreelistView.TreeListColumn)(new TreelistView.TreeListColumn("Event", "Event")));
TreelistView.TreeListColumn treeListColumn3 = ((TreelistView.TreeListColumn)(new TreelistView.TreeListColumn("Before", "Before")));
@@ -37,8 +38,12 @@
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.historyContext = new System.Windows.Forms.Label();
this.eventsHidden = new System.Windows.Forms.Label();
this.rightclickMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
this.hideFailedEventsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.debugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.events = new TreelistView.TreeListView();
this.tableLayoutPanel1.SuspendLayout();
this.rightclickMenu.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.events)).BeginInit();
this.SuspendLayout();
//
@@ -73,10 +78,35 @@
// eventsHidden
//
this.eventsHidden.AutoSize = true;
this.eventsHidden.ForeColor = System.Drawing.Color.Red;
this.eventsHidden.Location = new System.Drawing.Point(3, 52);
this.eventsHidden.Name = "eventsHidden";
this.eventsHidden.Size = new System.Drawing.Size(0, 13);
this.eventsHidden.Size = new System.Drawing.Size(92, 13);
this.eventsHidden.TabIndex = 3;
this.eventsHidden.Text = "events are hidden";
//
// rightclickMenu
//
this.rightclickMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.hideFailedEventsToolStripMenuItem,
this.debugToolStripMenuItem});
this.rightclickMenu.Name = "rightclickMenu";
this.rightclickMenu.Size = new System.Drawing.Size(161, 48);
//
// hideFailedEventsToolStripMenuItem
//
this.hideFailedEventsToolStripMenuItem.CheckOnClick = true;
this.hideFailedEventsToolStripMenuItem.Name = "hideFailedEventsToolStripMenuItem";
this.hideFailedEventsToolStripMenuItem.Size = new System.Drawing.Size(160, 22);
this.hideFailedEventsToolStripMenuItem.Text = "&Hide failed events";
this.hideFailedEventsToolStripMenuItem.CheckedChanged += new System.EventHandler(this.hideFailedEventsToolStripMenuItem_CheckedChanged);
//
// debugToolStripMenuItem
//
this.debugToolStripMenuItem.Name = "debugToolStripMenuItem";
this.debugToolStripMenuItem.Size = new System.Drawing.Size(160, 22);
this.debugToolStripMenuItem.Text = "&Debug pixel";
this.debugToolStripMenuItem.Click += new System.EventHandler(this.debugToolStripMenuItem_Click);
//
// events
//
@@ -104,7 +134,7 @@
treeListColumn4,
treeListColumn5,
treeListColumn6});
this.events.Cursor = System.Windows.Forms.Cursors.Arrow;
this.events.Cursor = System.Windows.Forms.Cursors.VSplit;
this.events.Dock = System.Windows.Forms.DockStyle.Fill;
this.events.Location = new System.Drawing.Point(3, 68);
this.events.MultiSelect = false;
@@ -117,6 +147,7 @@
this.events.ViewOptions.ShowLine = false;
this.events.ViewOptions.ShowPlusMinus = false;
this.events.NodeDoubleClicked += new TreelistView.TreeListView.NodeDoubleClickedHandler(this.events_NodeDoubleClicked);
this.events.MouseClick += new System.Windows.Forms.MouseEventHandler(this.events_MouseClick);
//
// PixelHistoryView
//
@@ -130,6 +161,7 @@
this.Text = "Pixel History";
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout();
this.rightclickMenu.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.events)).EndInit();
this.ResumeLayout(false);
@@ -141,5 +173,8 @@
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.Label historyContext;
private System.Windows.Forms.Label eventsHidden;
private System.Windows.Forms.ContextMenuStrip rightclickMenu;
private System.Windows.Forms.ToolStripMenuItem hideFailedEventsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem debugToolStripMenuItem;
}
}
+108 -31
View File
@@ -40,6 +40,12 @@ namespace renderdocui.Windows
public partial class PixelHistoryView : DockContent, ILogViewerForm
{
Core m_Core;
FetchTexture texture;
Point pixel;
PixelModification[] modifications;
bool[] visibleChannels;
float rangeMin, rangeMax;
int numChannels, channelIdx;
public PixelHistoryView(Core core, FetchTexture tex, Point pt,
float rangemin, float rangemax, bool[] channels,
@@ -49,16 +55,20 @@ namespace renderdocui.Windows
Icon = global::renderdocui.Properties.Resources.icon;
events.BeginInit();
events.BeginUpdate();
m_Core = core;
texture = tex;
pixel = pt;
modifications = history;
rangeMin = rangemin;
rangeMax = rangemax;
visibleChannels = channels;
Text = String.Format("Pixel History on {0} for ({1}, {2})", tex.name, pt.X, pt.Y);
string channelStr = "";
int numChannels = 0;
int channelIdx = 0;
numChannels = 0;
channelIdx = 0;
if (channels[0])
{
@@ -95,28 +105,40 @@ namespace renderdocui.Windows
historyContext.Text = String.Format("Preview colours displayed in visible range {0} - {1} with {2} visible.",
Formatter.Format(rangemin), Formatter.Format(rangemax), channelStr) + Environment.NewLine;
historyContext.Text += Environment.NewLine;
historyContext.Text += "Double click to jump to an event." + Environment.NewLine;
historyContext.Text += "Right click to debug an event, or hide failed events.";
bool uintTex = (tex.format.compType == FormatComponentType.UInt);
bool sintTex = (tex.format.compType == FormatComponentType.SInt);
bool srgbTex = tex.format.srgbCorrected ||
(tex.creationFlags & TextureCreationFlags.SwapBuffer) > 0;
eventsHidden.Text = "";
UpdateEventList();
}
void UpdateEventList()
{
events.BeginUpdate();
events.Nodes.Clear();
bool uintTex = (texture.format.compType == FormatComponentType.UInt);
bool sintTex = (texture.format.compType == FormatComponentType.SInt);
bool srgbTex = texture.format.srgbCorrected ||
(texture.creationFlags & TextureCreationFlags.SwapBuffer) > 0;
bool floatTex = (!uintTex && !sintTex);
int numComps = (int)tex.format.compCount;
int numComps = (int)texture.format.compCount;
if (tex.format.compType == FormatComponentType.Depth ||
(tex.format.special && tex.format.specialFormat == SpecialFormat.D24S8) ||
(tex.format.special && tex.format.specialFormat == SpecialFormat.D32S8))
if (texture.format.compType == FormatComponentType.Depth ||
(texture.format.special && texture.format.specialFormat == SpecialFormat.D24S8) ||
(texture.format.special && texture.format.specialFormat == SpecialFormat.D32S8))
numComps = 0;
float rangesize = (rangemax - rangemin);
float rangesize = (rangeMax - rangeMin);
foreach (PixelModification mod in history)
foreach (PixelModification mod in modifications)
{
string name = "name";
var drawcall = core.GetDrawcall(core.CurFrame, mod.eventID);
var drawcall = m_Core.GetDrawcall(m_Core.CurFrame, mod.eventID);
if (drawcall == null) continue;
@@ -155,6 +177,9 @@ namespace renderdocui.Windows
passed = false;
}
if(!passed && hideFailedEventsToolStripMenuItem.Checked)
continue;
string preModVal = "";
string postModVal = "";
@@ -223,17 +248,17 @@ namespace renderdocui.Windows
}
else
{
if (!channels[0]) r = 0.0f;
if (!channels[1]) g = 0.0f;
if (!channels[2]) b = 0.0f;
if (!visibleChannels[0]) r = 0.0f;
if (!visibleChannels[1]) g = 0.0f;
if (!visibleChannels[2]) b = 0.0f;
}
r = Helpers.Clamp((r - rangemin) / rangesize, 0.0f, 1.0f);
g = Helpers.Clamp((g - rangemin) / rangesize, 0.0f, 1.0f);
b = Helpers.Clamp((b - rangemin) / rangesize, 0.0f, 1.0f);
r = Helpers.Clamp((r - rangeMin) / rangesize, 0.0f, 1.0f);
g = Helpers.Clamp((g - rangeMin) / rangesize, 0.0f, 1.0f);
b = Helpers.Clamp((b - rangeMin) / rangesize, 0.0f, 1.0f);
if(numComps == 0)
r = g = b = Helpers.Clamp((mod.preMod.depth - rangemin) / rangesize, 0.0f, 1.0f);
r = g = b = Helpers.Clamp((mod.preMod.depth - rangeMin) / rangesize, 0.0f, 1.0f);
if (srgbTex)
{
@@ -254,17 +279,17 @@ namespace renderdocui.Windows
}
else
{
if (!channels[0]) r = 0.0f;
if (!channels[1]) g = 0.0f;
if (!channels[2]) b = 0.0f;
if (!visibleChannels[0]) r = 0.0f;
if (!visibleChannels[1]) g = 0.0f;
if (!visibleChannels[2]) b = 0.0f;
}
r = Helpers.Clamp((r - rangemin) / rangesize, 0.0f, 1.0f);
g = Helpers.Clamp((g - rangemin) / rangesize, 0.0f, 1.0f);
b = Helpers.Clamp((b - rangemin) / rangesize, 0.0f, 1.0f);
r = Helpers.Clamp((r - rangeMin) / rangesize, 0.0f, 1.0f);
g = Helpers.Clamp((g - rangeMin) / rangesize, 0.0f, 1.0f);
b = Helpers.Clamp((b - rangeMin) / rangesize, 0.0f, 1.0f);
if (numComps == 0)
r = g = b = Helpers.Clamp((mod.postMod.depth - rangemin) / rangesize, 0.0f, 1.0f);
r = g = b = Helpers.Clamp((mod.postMod.depth - rangeMin) / rangesize, 0.0f, 1.0f);
if (srgbTex)
{
@@ -280,7 +305,6 @@ namespace renderdocui.Windows
}
events.EndUpdate();
events.EndInit();
}
public void OnLogfileClosed()
@@ -303,5 +327,58 @@ namespace renderdocui.Windows
m_Core.SetEventID(this, m_Core.CurFrame, (uint)node.Tag);
}
}
private void events_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
rightclickMenu.Show(events.PointToScreen(e.Location));
}
}
private void debugToolStripMenuItem_Click(object sender, EventArgs e)
{
if (events.SelectedNode == null) return;
var node = events.SelectedNode;
if (node.Tag is uint)
{
m_Core.SetEventID(this, m_Core.CurFrame, (uint)node.Tag);
ShaderDebugTrace trace = null;
ShaderReflection shaderDetails = m_Core.CurPipelineState.GetShaderReflection(ShaderStageType.Pixel);
m_Core.Renderer.Invoke((ReplayRenderer r) =>
{
trace = r.PSGetDebugStates((UInt32)pixel.X, (UInt32)pixel.Y);
});
if (trace == null || trace.states.Length == 0)
{
MessageBox.Show("Error debugging pixel.", "Debug Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
this.BeginInvoke(new Action(() =>
{
ShaderViewer s = new ShaderViewer(m_Core, shaderDetails, ShaderStageType.Pixel, trace);
s.Show(this.DockPanel);
}));
}
}
private void hideFailedEventsToolStripMenuItem_CheckedChanged(object sender, EventArgs e)
{
if (hideFailedEventsToolStripMenuItem.Checked)
eventsHidden.Text = "Failed events are currently hidden";
else
eventsHidden.Text = "";
UpdateEventList();
}
}
}
@@ -117,4 +117,7 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="rightclickMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>