mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-06 01:50:38 +00:00
Add shader subroutines (placeholder) and transform feedback
* The transform feedback is placed on the geometry shader tab the same as in D3D11. It doesn't merit its own whole tab and that seemed like the best place to put it (last processing stage before rasterization). * To aid understanding, further stages are marked disabled if rasterizer discard is on, and if no geometry shader is bound the stage is renamed.
This commit is contained in:
@@ -1014,7 +1014,7 @@ namespace renderdocui.Windows.PipelineState
|
||||
gsStreams.SetVScrollValue(vs);
|
||||
|
||||
gsStreams.Visible = gsStreams.Parent.Visible = streamoutSet;
|
||||
if (gsStreams.Visible)
|
||||
if (streamoutSet)
|
||||
geomTableLayout.ColumnStyles[1].Width = 50.0f;
|
||||
else
|
||||
geomTableLayout.ColumnStyles[1].Width = 0;
|
||||
|
||||
+831
-787
File diff suppressed because it is too large
Load Diff
@@ -106,7 +106,7 @@ namespace renderdocui.Windows.PipelineState
|
||||
ClearShaderState(csShader, csTextures, csSamplers, csCBuffers, csSubroutines);
|
||||
|
||||
csUAVs.Nodes.Clear();
|
||||
gsStreams.Nodes.Clear();
|
||||
gsFeedback.Nodes.Clear();
|
||||
|
||||
var tick = global::renderdocui.Properties.Resources.tick;
|
||||
var cross = global::renderdocui.Properties.Resources.cross;
|
||||
@@ -505,13 +505,19 @@ namespace renderdocui.Windows.PipelineState
|
||||
subs.BeginUpdate();
|
||||
subs.Nodes.Clear();
|
||||
{
|
||||
// TODO fetch subroutines
|
||||
UInt32 i = 0;
|
||||
foreach (var subval in stage.Subroutines)
|
||||
{
|
||||
subs.Nodes.Add(new object[] { i.ToString(), subval.ToString() });
|
||||
|
||||
i++;
|
||||
}
|
||||
}
|
||||
subs.EndUpdate();
|
||||
subs.NodesSelection.Clear();
|
||||
subs.SetVScrollValue(vs);
|
||||
|
||||
subs.Visible = subs.Parent.Visible = true; //(stage.Subroutines.Length > 0);
|
||||
subs.Visible = subs.Parent.Visible = (stage.Subroutines.Length > 0);
|
||||
}
|
||||
|
||||
// from https://gist.github.com/mjijackson/5311256
|
||||
@@ -820,10 +826,68 @@ namespace renderdocui.Windows.PipelineState
|
||||
csUAVs.NodesSelection.Clear();
|
||||
csUAVs.EndUpdate();
|
||||
|
||||
gsStreams.BeginUpdate();
|
||||
gsStreams.Nodes.Clear();
|
||||
gsStreams.EndUpdate();
|
||||
gsStreams.NodesSelection.Clear();
|
||||
vs = gsFeedback.VScrollValue();
|
||||
gsFeedback.BeginUpdate();
|
||||
gsFeedback.Nodes.Clear();
|
||||
if (state.m_Feedback.Active)
|
||||
{
|
||||
feedbackPaused.Image = state.m_Feedback.Paused ? tick : cross;
|
||||
for(int i=0; i < state.m_Feedback.BufferBinding.Length; i++)
|
||||
{
|
||||
bool filledSlot = (state.m_Feedback.BufferBinding[i] != ResourceId.Null);
|
||||
bool usedSlot = (filledSlot);
|
||||
|
||||
// show if
|
||||
if (usedSlot || // it's referenced by the shader - regardless of empty or not
|
||||
(showDisabled.Checked && !usedSlot && filledSlot) || // it's bound, but not referenced, and we have "show disabled"
|
||||
(showEmpty.Checked && !filledSlot) // it's empty, and we have "show empty"
|
||||
)
|
||||
{
|
||||
string name = "Buffer " + state.m_Feedback.BufferBinding[i].ToString();
|
||||
ulong length = state.m_Feedback.Size[i];
|
||||
|
||||
if (!filledSlot)
|
||||
{
|
||||
name = "Empty";
|
||||
}
|
||||
|
||||
FetchBuffer fetch = null;
|
||||
|
||||
for (int t = 0; t < bufs.Length; t++)
|
||||
{
|
||||
if (bufs[t].ID == state.m_Feedback.BufferBinding[i])
|
||||
{
|
||||
name = bufs[t].name;
|
||||
if(length == 0)
|
||||
length = bufs[t].length;
|
||||
|
||||
fetch = bufs[t];
|
||||
}
|
||||
}
|
||||
|
||||
var node = gsFeedback.Nodes.Add(new object[] { i, name, length, state.m_Feedback.Offset[i] });
|
||||
|
||||
node.Image = global::renderdocui.Properties.Resources.action;
|
||||
node.HoverImage = global::renderdocui.Properties.Resources.action_hover;
|
||||
node.Tag = fetch;
|
||||
|
||||
if (!filledSlot)
|
||||
EmptyRow(node);
|
||||
|
||||
if (!usedSlot)
|
||||
InactiveRow(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
gsFeedback.EndUpdate();
|
||||
gsFeedback.NodesSelection.Clear();
|
||||
gsFeedback.SetVScrollValue(vs);
|
||||
|
||||
gsFeedback.Visible = gsFeedback.Parent.Visible = state.m_Feedback.Active;
|
||||
if (state.m_Feedback.Active)
|
||||
geomTableLayout.ColumnStyles[1].Width = 50.0f;
|
||||
else
|
||||
geomTableLayout.ColumnStyles[1].Width = 0;
|
||||
|
||||
////////////////////////////////////////////////
|
||||
// Rasterizer
|
||||
@@ -1267,23 +1331,35 @@ namespace renderdocui.Windows.PipelineState
|
||||
}
|
||||
else
|
||||
{
|
||||
bool raster = true;
|
||||
bool fbo = true;
|
||||
|
||||
if (state.m_VtxProcess.discard)
|
||||
{
|
||||
raster = fbo = false;
|
||||
}
|
||||
|
||||
if (state.m_GS.Shader == ResourceId.Null &&
|
||||
state.m_Feedback.Active)
|
||||
{
|
||||
pipeFlow.SetStageName(4, new KeyValuePair<string, string>("XFB", "Transform Feedback"));
|
||||
}
|
||||
else
|
||||
{
|
||||
pipeFlow.SetStageName(4, new KeyValuePair<string, string>("GS", "Geometry Shader"));
|
||||
}
|
||||
|
||||
pipeFlow.SetStagesEnabled(new bool[] {
|
||||
true,
|
||||
true,
|
||||
state.m_TES.Shader != ResourceId.Null,
|
||||
state.m_TCS.Shader != ResourceId.Null,
|
||||
state.m_GS.Shader != ResourceId.Null,
|
||||
true,
|
||||
state.m_FS.Shader != ResourceId.Null,
|
||||
true,
|
||||
state.m_GS.Shader != ResourceId.Null || state.m_Feedback.Active,
|
||||
raster,
|
||||
!state.m_VtxProcess.discard && state.m_FS.Shader != ResourceId.Null,
|
||||
fbo,
|
||||
false
|
||||
});
|
||||
|
||||
// if(streamout only)
|
||||
//{
|
||||
// pipeFlow.Rasterizer = false;
|
||||
// pipeFlow.OutputMerger = false;
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -135,6 +135,21 @@
|
||||
<metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>239, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="feedbackPaused.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m
|
||||
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHCSURBVDhPpZFZL0NBHMW94X4Xe6vW2BJSa6ql1OWW
|
||||
Wkvjheptq9VSgliuR7GvkdhiDSLxqJYKn0F8CdVj5oqG9tri4TeZOfM//5k5EwHgX0iKf0FS/A7tUqlQ
|
||||
PlvofF+HFXxH5WKJYNo3oG2Hg1LI4akmWShFxUKx0LHXgIl7NzyXVujXtMgaSLFJFoeimS8SjLt6jN25
|
||||
MHrnRP16FbI9qUhzyKKCRcYzLq/lmG36aKSo54oEeuURnxPDPod4cqZb4U/tTYqi+2/mUy6j+Yh94i9M
|
||||
4DYrOt/NJCyhdbsOw7e9GLq1g1utRIYr2Z9iTxTNYoO2k7r85sOax0EvjzFfH3RrKj8Jq1M1oxxt2WIx
|
||||
eGOH55pH7YoG6X1yv8KWEDSLDZoOdNGG3WqYz9sx+TAAj9cK454epgMD+r0WuK8tYJfVSHPKXpKtn81i
|
||||
AzqwG2qGnAzToUF859CNDa4rM1xeM3RL5TSsgJyPDzNTghMSFqOaVqJxswbuqx44LrtQvaACCSsgt8RJ
|
||||
mimfFsqpXKZgPJtcWQPtfBlIWAFZT+yXZkqYQP6XyexXgIT1nGSOjQzdD0VSJGExid0xP5opkuLvQcQr
|
||||
vqKpPDRN9lYAAAAASUVORK5CYII=
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="tableLayoutPanel14.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</metadata>
|
||||
@@ -165,7 +180,6 @@
|
||||
<metadata name="label36.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="multisampleEnable.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m
|
||||
|
||||
Reference in New Issue
Block a user