mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-28 17:36:36 +00:00
Add selection of primitive to pixel debug from pixel history
* This means when multiple fragments are writing to a pixel you can choose precisely the one you want to debug, rather than the debugging always running the approximately last fragment to pass
This commit is contained in:
@@ -213,11 +213,11 @@ namespace renderdoc
|
||||
[DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
|
||||
private static extern bool ReplayRenderer_PixelHistory(IntPtr real, ResourceId target, UInt32 x, UInt32 y, IntPtr history);
|
||||
[DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
|
||||
private static extern bool ReplayRenderer_VSGetDebugStates(IntPtr real, UInt32 vertid, UInt32 instid, UInt32 idx, UInt32 instOffset, UInt32 vertOffset, IntPtr outtrace);
|
||||
private static extern bool ReplayRenderer_DebugVertex(IntPtr real, UInt32 vertid, UInt32 instid, UInt32 idx, UInt32 instOffset, UInt32 vertOffset, IntPtr outtrace);
|
||||
[DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
|
||||
private static extern bool ReplayRenderer_PSGetDebugStates(IntPtr real, UInt32 x, UInt32 y, IntPtr outtrace);
|
||||
private static extern bool ReplayRenderer_DebugPixel(IntPtr real, UInt32 x, UInt32 y, UInt32 sample, UInt32 primitive, IntPtr outtrace);
|
||||
[DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
|
||||
private static extern bool ReplayRenderer_CSGetDebugStates(IntPtr real, UInt32[] groupid, UInt32[] threadid, IntPtr outtrace);
|
||||
private static extern bool ReplayRenderer_DebugThread(IntPtr real, UInt32[] groupid, UInt32[] threadid, IntPtr outtrace);
|
||||
|
||||
[DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
|
||||
private static extern bool ReplayRenderer_GetUsage(IntPtr real, ResourceId id, IntPtr outusage);
|
||||
@@ -506,11 +506,11 @@ namespace renderdoc
|
||||
return ret;
|
||||
}
|
||||
|
||||
public ShaderDebugTrace VSGetDebugStates(UInt32 vertid, UInt32 instid, UInt32 idx, UInt32 instOffset, UInt32 vertOffset)
|
||||
public ShaderDebugTrace DebugVertex(UInt32 vertid, UInt32 instid, UInt32 idx, UInt32 instOffset, UInt32 vertOffset)
|
||||
{
|
||||
IntPtr mem = CustomMarshal.Alloc(typeof(ShaderDebugTrace));
|
||||
|
||||
bool success = ReplayRenderer_VSGetDebugStates(m_Real, vertid, instid, idx, instOffset, vertOffset, mem);
|
||||
bool success = ReplayRenderer_DebugVertex(m_Real, vertid, instid, idx, instOffset, vertOffset, mem);
|
||||
|
||||
ShaderDebugTrace ret = null;
|
||||
|
||||
@@ -522,11 +522,11 @@ namespace renderdoc
|
||||
return ret;
|
||||
}
|
||||
|
||||
public ShaderDebugTrace PSGetDebugStates(UInt32 x, UInt32 y)
|
||||
public ShaderDebugTrace DebugPixel(UInt32 x, UInt32 y, UInt32 sample, UInt32 primitive)
|
||||
{
|
||||
IntPtr mem = CustomMarshal.Alloc(typeof(ShaderDebugTrace));
|
||||
|
||||
bool success = ReplayRenderer_PSGetDebugStates(m_Real, x, y, mem);
|
||||
bool success = ReplayRenderer_DebugPixel(m_Real, x, y, sample, primitive, mem);
|
||||
|
||||
ShaderDebugTrace ret = null;
|
||||
|
||||
@@ -538,11 +538,11 @@ namespace renderdoc
|
||||
return ret;
|
||||
}
|
||||
|
||||
public ShaderDebugTrace CSGetDebugStates(UInt32[] groupid, UInt32[] threadid)
|
||||
public ShaderDebugTrace DebugThread(UInt32[] groupid, UInt32[] threadid)
|
||||
{
|
||||
IntPtr mem = CustomMarshal.Alloc(typeof(ShaderDebugTrace));
|
||||
|
||||
bool success = ReplayRenderer_CSGetDebugStates(m_Real, groupid, threadid, mem);
|
||||
bool success = ReplayRenderer_DebugThread(m_Real, groupid, threadid, mem);
|
||||
|
||||
ShaderDebugTrace ret = null;
|
||||
|
||||
|
||||
@@ -2172,7 +2172,7 @@ namespace renderdocui.Windows
|
||||
|
||||
m_Core.Renderer.Invoke((ReplayRenderer r) =>
|
||||
{
|
||||
trace = r.VSGetDebugStates((UInt32)row, (UInt32)m_CurInst, idx, draw.instanceOffset, draw.vertexOffset);
|
||||
trace = r.DebugVertex((UInt32)row, (UInt32)m_CurInst, idx, draw.instanceOffset, draw.vertexOffset);
|
||||
});
|
||||
|
||||
this.BeginInvoke(new Action(() =>
|
||||
|
||||
@@ -2030,7 +2030,7 @@ namespace renderdocui.Windows.PipelineState
|
||||
|
||||
m_Core.Renderer.Invoke((ReplayRenderer r) =>
|
||||
{
|
||||
trace = r.CSGetDebugStates(new uint[] { gx, gy, gz }, new uint[] { tx, ty, tz });
|
||||
trace = r.DebugThread(new uint[] { gx, gy, gz }, new uint[] { tx, ty, tz });
|
||||
});
|
||||
|
||||
if (trace == null || trace.states.Length == 0)
|
||||
|
||||
@@ -39,9 +39,22 @@ namespace renderdocui.Windows
|
||||
{
|
||||
public partial class PixelHistoryView : DockContent, ILogViewerForm
|
||||
{
|
||||
struct EventTag
|
||||
{
|
||||
public EventTag(uint eid, uint prim)
|
||||
{
|
||||
EID = eid;
|
||||
Primitive = prim;
|
||||
}
|
||||
|
||||
public uint EID;
|
||||
public uint Primitive;
|
||||
};
|
||||
|
||||
Core m_Core;
|
||||
FetchTexture texture;
|
||||
Point pixel;
|
||||
uint sample;
|
||||
PixelModification[] modifications;
|
||||
bool[] visibleChannels;
|
||||
float rangeMin, rangeMax;
|
||||
@@ -61,6 +74,7 @@ namespace renderdocui.Windows
|
||||
rangeMin = rangemin;
|
||||
rangeMax = rangemax;
|
||||
visibleChannels = channels;
|
||||
sample = 0;
|
||||
|
||||
Text = String.Format("Pixel History on {0} for ({1}, {2})", tex.name, pt.X, pt.Y);
|
||||
|
||||
@@ -276,7 +290,7 @@ namespace renderdocui.Windows
|
||||
node = new TreelistView.Node(new object[] { name, shadOutVal, "", postModVal, "" });
|
||||
}
|
||||
|
||||
node.Tag = mod.eventID;
|
||||
node.Tag = new EventTag(mod.eventID, mod.uavWrite ? uint.MaxValue : mod.primitiveID);
|
||||
|
||||
if (floatTex || depth)
|
||||
{
|
||||
@@ -360,7 +374,7 @@ namespace renderdocui.Windows
|
||||
var node = new TreelistView.Node(new object[] { name, preModVal, "", postModVal, "" });
|
||||
|
||||
node.DefaultBackColor = passed ? Color.FromArgb(235, 255, 235) : Color.FromArgb(255, 235, 235);
|
||||
node.Tag = mods[0].eventID;
|
||||
node.Tag = new EventTag(mods[0].eventID, uint.MaxValue);
|
||||
|
||||
if (uavnowrite)
|
||||
node.DefaultBackColor = Color.FromArgb(235, 235, 235);
|
||||
@@ -427,9 +441,9 @@ namespace renderdocui.Windows
|
||||
|
||||
private void events_NodeDoubleClicked(TreelistView.Node node)
|
||||
{
|
||||
if (node.Tag is uint)
|
||||
if (node.Tag is EventTag)
|
||||
{
|
||||
m_Core.SetEventID(this, m_Core.CurFrame, (uint)node.Tag);
|
||||
m_Core.SetEventID(this, m_Core.CurFrame, ((EventTag)node.Tag).EID);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -441,11 +455,12 @@ namespace renderdocui.Windows
|
||||
|
||||
debugToolStripMenuItem.Text = "Debug Pixel";
|
||||
|
||||
if (events.SelectedNode != null && events.SelectedNode.Tag != null && events.SelectedNode.Tag is uint)
|
||||
if (events.SelectedNode != null && events.SelectedNode.Tag != null && events.SelectedNode.Tag is EventTag)
|
||||
{
|
||||
EventTag tag = (EventTag)events.SelectedNode.Tag;
|
||||
debugToolStripMenuItem.Enabled = true;
|
||||
debugToolStripMenuItem.Text = String.Format("Debug Pixel ({0}, {1}) at Event {2}",
|
||||
pixel.X, pixel.Y, (uint)events.SelectedNode.Tag);
|
||||
debugToolStripMenuItem.Text = String.Format("Debug Pixel ({0}, {1}) primitive {2} at Event {3}",
|
||||
pixel.X, pixel.Y, tag.Primitive, tag.EID);
|
||||
}
|
||||
|
||||
rightclickMenu.Show(events.PointToScreen(e.Location));
|
||||
@@ -458,9 +473,11 @@ namespace renderdocui.Windows
|
||||
|
||||
var node = events.SelectedNode;
|
||||
|
||||
if (node.Tag is uint)
|
||||
if (node.Tag is EventTag)
|
||||
{
|
||||
m_Core.SetEventID(this, m_Core.CurFrame, (uint)node.Tag);
|
||||
EventTag tag = (EventTag)node.Tag;
|
||||
|
||||
m_Core.SetEventID(this, m_Core.CurFrame, tag.EID);
|
||||
|
||||
ShaderDebugTrace trace = null;
|
||||
|
||||
@@ -468,7 +485,7 @@ namespace renderdocui.Windows
|
||||
|
||||
m_Core.Renderer.Invoke((ReplayRenderer r) =>
|
||||
{
|
||||
trace = r.PSGetDebugStates((UInt32)pixel.X, (UInt32)pixel.Y);
|
||||
trace = r.DebugPixel((UInt32)pixel.X, (UInt32)pixel.Y, sample, tag.Primitive);
|
||||
});
|
||||
|
||||
if (trace == null || trace.states.Length == 0)
|
||||
|
||||
@@ -2681,7 +2681,7 @@ namespace renderdocui.Windows
|
||||
|
||||
m_Core.Renderer.Invoke((ReplayRenderer r) =>
|
||||
{
|
||||
trace = r.PSGetDebugStates((UInt32)m_PickedPoint.X, (UInt32)m_PickedPoint.Y);
|
||||
trace = r.DebugPixel((UInt32)m_PickedPoint.X, (UInt32)m_PickedPoint.Y, m_TexDisplay.sampleIdx, uint.MaxValue);
|
||||
});
|
||||
|
||||
if (trace == null || trace.states.Length == 0)
|
||||
|
||||
Reference in New Issue
Block a user