In D3D11 support setting friendly names on shaders

This commit is contained in:
baldurk
2014-09-10 18:25:29 +01:00
parent 2735de8b9a
commit 35884170eb
6 changed files with 54 additions and 3 deletions
+13
View File
@@ -474,6 +474,8 @@ D3D11PipelineState D3D11Replay::MakePipelineState()
D3D11PipelineState::ShaderStage *dstArr = &ret.m_VS;
const D3D11RenderState::shader *srcArr = &rs->VS;
const char *stageNames[] = { "Vertex", "Hull", "Domain", "Geometry", "Pixel", "Compute" };
for(size_t i=0; i < 6; i++)
{
D3D11PipelineState::ShaderStage &dst = dstArr[i];
@@ -486,6 +488,17 @@ D3D11PipelineState D3D11Replay::MakePipelineState()
dst.Shader = rm->GetOriginalID(id);
dst.ShaderDetails = NULL;
string str = GetDebugName(src.Shader);
dst.customName = true;
if(str == "" && dst.Shader != ResourceId())
{
dst.customName = false;
str = StringFormat::Fmt("%hs Shader %llu", stageNames[i], dst.Shader);
}
dst.ShaderName = widen(str);
// create identity bindpoint mapping
create_array_uninit(dst.BindpointMapping.ConstantBlocks, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT);
for(int s=0; s < D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT; s++)
+2
View File
@@ -71,6 +71,8 @@ struct D3D11PipelineState
{
ShaderStage() : Shader(), ShaderDetails(NULL) {}
ResourceId Shader;
rdctype::wstr ShaderName;
bool32 customName;
ShaderReflection *ShaderDetails;
ShaderBindpointMapping BindpointMapping;
+33
View File
@@ -208,6 +208,39 @@ namespace renderdocui.Code
return ResourceId.Null;
}
public string GetShaderName(ShaderStageType stage)
{
if (LogLoaded)
{
if (IsLogD3D11)
{
switch (stage)
{
case ShaderStageType.Vertex: return m_D3D11.m_VS.ShaderName;
case ShaderStageType.Domain: return m_D3D11.m_DS.ShaderName;
case ShaderStageType.Hull: return m_D3D11.m_HS.ShaderName;
case ShaderStageType.Geometry: return m_D3D11.m_GS.ShaderName;
case ShaderStageType.Pixel: return m_D3D11.m_PS.ShaderName;
case ShaderStageType.Compute: return m_D3D11.m_CS.ShaderName;
}
}
else if (IsLogGL)
{
switch (stage)
{
case ShaderStageType.Vertex: return String.Format("Shader {0}", m_GL.m_VS.Shader);
case ShaderStageType.Tess_Control: return String.Format("Shader {0}", m_GL.m_TCS.Shader);
case ShaderStageType.Tess_Eval: return String.Format("Shader {0}", m_GL.m_TES.Shader);
case ShaderStageType.Geometry: return String.Format("Shader {0}", m_GL.m_GS.Shader);
case ShaderStageType.Fragment: return String.Format("Shader {0}", m_GL.m_FS.Shader);
case ShaderStageType.Compute: return String.Format("Shader {0}", m_GL.m_CS.Shader);
}
}
}
return "";
}
public void GetIBuffer(out ResourceId buf, out uint ByteOffset, out ResourceFormat IndexFormat)
{
if (LogLoaded)
@@ -103,6 +103,9 @@ namespace renderdoc
}
public ResourceId Shader;
[CustomMarshalAs(CustomUnmanagedType.WideTemplatedString)]
public string ShaderName;
public bool customName;
private IntPtr _ptr_ShaderDetails;
[CustomMarshalAs(CustomUnmanagedType.Skip)]
public ShaderReflection ShaderDetails;
@@ -192,7 +192,7 @@ namespace renderdocui.Windows.PipelineState
if (stage.Shader == ResourceId.Null)
shader.Text = "Unbound";
else
shader.Text = "Shader " + stage.Shader.ToString();
shader.Text = stage.ShaderName;
if (shaderDetails != null && shaderDetails.DebugInfo.entryFunc != "" && shaderDetails.DebugInfo.files.Length > 0)
shader.Text = shaderDetails.DebugInfo.entryFunc + "()" + " - " +
+2 -2
View File
@@ -308,9 +308,9 @@ namespace renderdocui.Windows
}
if (trace != null)
Text = String.Format("Debug Shader {0} - {1}", m_Core.CurPipelineState.GetShader(stage), debugContext);
Text = String.Format("Debugging {0} - {1}", m_Core.CurPipelineState.GetShaderName(stage), debugContext);
else
Text = String.Format("Shader {0}", m_Core.CurPipelineState.GetShader(stage));
Text = m_Core.CurPipelineState.GetShaderName(stage);
var disasm = shader.Disassembly;