mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-06 01:50:38 +00:00
Display custom glObjectLabel for shaders, programs and pipeline
This commit is contained in:
@@ -72,8 +72,22 @@ struct GLPipelineState
|
||||
|
||||
struct ShaderStage
|
||||
{
|
||||
ShaderStage() : Shader(), ShaderDetails(NULL) {}
|
||||
ShaderStage()
|
||||
: Shader()
|
||||
, customShaderName(false), customProgramName(false)
|
||||
, customPipelineName(false), ShaderDetails(NULL) {}
|
||||
ResourceId Shader;
|
||||
|
||||
rdctype::str ShaderName;
|
||||
bool32 customShaderName;
|
||||
|
||||
rdctype::str ProgramName;
|
||||
bool32 customProgramName;
|
||||
|
||||
bool32 PipelineActive;
|
||||
rdctype::str PipelineName;
|
||||
bool32 customPipelineName;
|
||||
|
||||
ShaderReflection *ShaderDetails;
|
||||
ShaderBindpointMapping BindpointMapping;
|
||||
|
||||
|
||||
@@ -506,6 +506,17 @@ template<>
|
||||
void Serialiser::Serialise(const char *name, GLPipelineState::ShaderStage &el)
|
||||
{
|
||||
Serialise("", el.Shader);
|
||||
|
||||
Serialise("", el.ShaderName);
|
||||
Serialise("", el.customShaderName);
|
||||
|
||||
Serialise("", el.ProgramName);
|
||||
Serialise("", el.customProgramName);
|
||||
|
||||
Serialise("", el.PipelineActive);
|
||||
Serialise("", el.PipelineName);
|
||||
Serialise("", el.customPipelineName);
|
||||
|
||||
Serialise("", el.stage);
|
||||
Serialise("", el.BindpointMapping);
|
||||
Serialise("", el.Subroutines);
|
||||
@@ -513,7 +524,7 @@ void Serialiser::Serialise(const char *name, GLPipelineState::ShaderStage &el)
|
||||
if(m_Mode == READING)
|
||||
el.ShaderDetails = NULL;
|
||||
|
||||
SIZE_CHECK(GLPipelineState::ShaderStage, 104);
|
||||
SIZE_CHECK(GLPipelineState::ShaderStage, 176);
|
||||
}
|
||||
|
||||
template<>
|
||||
@@ -693,7 +704,7 @@ void Serialiser::Serialise(const char *name, GLPipelineState &el)
|
||||
|
||||
Serialise("", el.m_Hints);
|
||||
|
||||
SIZE_CHECK(GLPipelineState, 1520);
|
||||
SIZE_CHECK(GLPipelineState, 1952);
|
||||
}
|
||||
|
||||
#pragma endregion OpenGL pipeline state
|
||||
|
||||
@@ -1070,9 +1070,20 @@ void GLReplay::SavePipelineState()
|
||||
{
|
||||
ResourceId id = rm->GetID(ProgramPipeRes(ctx, curProg));
|
||||
auto &pipeDetails = m_pDriver->m_Pipelines[id];
|
||||
|
||||
string pipelineName;
|
||||
{
|
||||
char name[128] = {0};
|
||||
gl.glGetObjectLabel(eGL_PROGRAM_PIPELINE, curProg, 127, NULL, name);
|
||||
pipelineName = name;
|
||||
}
|
||||
|
||||
for(size_t i=0; i < ARRAY_COUNT(pipeDetails.stageShaders); i++)
|
||||
{
|
||||
stages[i]->PipelineActive = true;
|
||||
stages[i]->PipelineName = pipelineName;
|
||||
stages[i]->customPipelineName = (pipelineName != "");
|
||||
|
||||
if(pipeDetails.stageShaders[i] != ResourceId())
|
||||
{
|
||||
curProg = rm->GetCurrentResource(pipeDetails.stagePrograms[i]).name;
|
||||
@@ -1080,6 +1091,20 @@ void GLReplay::SavePipelineState()
|
||||
refls[i] = GetShader(pipeDetails.stageShaders[i], "");
|
||||
GetBindpointMapping(gl.GetHookset(), curProg, (int)i, refls[i], stages[i]->BindpointMapping);
|
||||
mappings[i] = &stages[i]->BindpointMapping;
|
||||
|
||||
{
|
||||
char name[128] = {0};
|
||||
gl.glGetObjectLabel(eGL_PROGRAM, curProg, 127, NULL, name);
|
||||
stages[i]->ProgramName = name;
|
||||
stages[i]->customProgramName = (name[0] != 0);
|
||||
}
|
||||
|
||||
{
|
||||
char name[128] = {0};
|
||||
gl.glGetObjectLabel(eGL_SHADER, rm->GetCurrentResource(pipeDetails.stageShaders[i]).name, 127, NULL, name);
|
||||
stages[i]->ShaderName = name;
|
||||
stages[i]->customShaderName = (name[0] != 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1092,14 +1117,31 @@ void GLReplay::SavePipelineState()
|
||||
{
|
||||
auto &progDetails = m_pDriver->m_Programs[rm->GetID(ProgramRes(ctx, curProg))];
|
||||
|
||||
string programName;
|
||||
{
|
||||
char name[128] = {0};
|
||||
gl.glGetObjectLabel(eGL_PROGRAM, curProg, 127, NULL, name);
|
||||
programName = name;
|
||||
}
|
||||
|
||||
for(size_t i=0; i < ARRAY_COUNT(progDetails.stageShaders); i++)
|
||||
{
|
||||
if(progDetails.stageShaders[i] != ResourceId())
|
||||
{
|
||||
stages[i]->ProgramName = programName;
|
||||
stages[i]->customProgramName = (programName != "");
|
||||
|
||||
stages[i]->Shader = rm->GetOriginalID(progDetails.stageShaders[i]);
|
||||
refls[i] = GetShader(progDetails.stageShaders[i], "");
|
||||
GetBindpointMapping(gl.GetHookset(), curProg, (int)i, refls[i], stages[i]->BindpointMapping);
|
||||
mappings[i] = &stages[i]->BindpointMapping;
|
||||
|
||||
{
|
||||
char name[128] = {0};
|
||||
gl.glGetObjectLabel(eGL_SHADER, rm->GetCurrentResource(progDetails.stageShaders[i]).name, 127, NULL, name);
|
||||
stages[i]->ShaderName = name;
|
||||
stages[i]->customShaderName = (name[0] != 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,6 +97,20 @@ namespace renderdoc
|
||||
}
|
||||
|
||||
public ResourceId Shader;
|
||||
|
||||
[CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)]
|
||||
public string ShaderName;
|
||||
public bool customShaderName;
|
||||
|
||||
[CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)]
|
||||
public string ProgramName;
|
||||
public bool customProgramName;
|
||||
|
||||
public bool PipelineActive;
|
||||
[CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)]
|
||||
public string PipelineName;
|
||||
public bool customPipelineName;
|
||||
|
||||
private IntPtr _ptr_ShaderDetails;
|
||||
[CustomMarshalAs(CustomUnmanagedType.Skip)]
|
||||
public ShaderReflection ShaderDetails;
|
||||
|
||||
@@ -282,9 +282,31 @@ namespace renderdocui.Windows.PipelineState
|
||||
var mapping = stage.BindpointMapping;
|
||||
|
||||
if (stage.Shader == ResourceId.Null)
|
||||
{
|
||||
shader.Text = "Unbound";
|
||||
}
|
||||
else
|
||||
shader.Text = stage.stage.Str(APIPipelineStateType.OpenGL) + " Shader " + stage.Shader.ToString();
|
||||
{
|
||||
string shaderName = stage.stage.Str(APIPipelineStateType.OpenGL) + " Shader";
|
||||
|
||||
if (!stage.customShaderName && !stage.customProgramName && !stage.customPipelineName)
|
||||
{
|
||||
shader.Text = shaderName + stage.Shader.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (stage.customShaderName)
|
||||
shaderName = stage.ShaderName;
|
||||
|
||||
if (stage.customProgramName)
|
||||
shaderName = stage.ProgramName + " - " + shaderName;
|
||||
|
||||
if (stage.customPipelineName && stage.PipelineActive)
|
||||
shaderName = stage.PipelineName + " - " + shaderName;
|
||||
|
||||
shader.Text = shaderName;
|
||||
}
|
||||
}
|
||||
|
||||
// disabled since entry function is always main, and filenames have no names, so this is useless.
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user