Centralise debug message processing, and allow adding custom warnings

* This will allow the adding of things like 'redundant api call' for calls
  that have no effect, as well as potential problems like drawing with an
  empty viewport, or similar things that are common problems. Reading out-
  of-bounds on buffers etc is a good example of 'defined' behaviour that
  is probably not desired.
* These heuristics could also identify potential performance problems.
* It also supports adding debug messages after log-load time, so you could
  do an additional extra-strength pass, or do a detailed check of one
  draw call (e.g. a broken draw, to try and figure out the problem). If
  there are any unread debug messages, the status bar will flash and the
  debug messages window will show a count as (N).
This commit is contained in:
baldurk
2015-01-11 00:20:50 +00:00
parent 6de7644e68
commit 04f1d4a378
32 changed files with 547 additions and 322 deletions
+12 -11
View File
@@ -106,15 +106,6 @@ struct FetchTexture
uint64_t byteSize;
};
struct FetchFrameInfo
{
uint32_t frameNumber;
uint32_t firstEvent;
uint64_t fileOffset;
uint64_t captureTime;
ResourceId immContextId;
};
struct FetchAPIEvent
{
uint32_t eventID;
@@ -130,12 +121,24 @@ struct FetchAPIEvent
struct DebugMessage
{
uint32_t eventID;
DebugMessageCategory category;
DebugMessageSeverity severity;
DebugMessageSource source;
uint32_t messageID;
rdctype::str description;
};
struct FetchFrameInfo
{
uint32_t frameNumber;
uint32_t firstEvent;
uint64_t fileOffset;
uint64_t captureTime;
ResourceId immContextId;
rdctype::array<DebugMessage> debugMessages;
};
struct EventUsage
{
EventUsage()
@@ -199,8 +202,6 @@ struct FetchDrawcall
rdctype::array<FetchAPIEvent> events;
rdctype::array<FetchDrawcall> children;
rdctype::array<DebugMessage> debugMessages;
};
struct APIProperties
+1
View File
@@ -151,6 +151,7 @@ extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetTextures(ReplayRe
extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetBuffers(ReplayRenderer *rend, rdctype::array<FetchBuffer> *bufs);
extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetResolve(ReplayRenderer *rend, uint64_t *callstack, uint32_t callstackLen, rdctype::array<rdctype::str> *trace);
extern "C" RENDERDOC_API ShaderReflection* RENDERDOC_CC ReplayRenderer_GetShaderDetails(ReplayRenderer *rend, ResourceId shader);
extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetDebugMessages(ReplayRenderer *rend, rdctype::array<DebugMessage> *msgs);
extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_PixelHistory(ReplayRenderer *rend, ResourceId target, uint32_t x, uint32_t y, uint32_t sampleIdx, rdctype::array<PixelModification> *history);
extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_DebugVertex(ReplayRenderer *rend, uint32_t vertid, uint32_t instid, uint32_t idx, uint32_t instOffset, uint32_t vertOffset, ShaderDebugTrace *trace);
+10
View File
@@ -286,6 +286,16 @@ enum DebugMessageSeverity
eDbgSeverity_Info,
};
enum DebugMessageSource
{
eDbgSource_API = 0,
eDbgSource_RedundantAPIUse,
eDbgSource_IncorrectAPIUse,
eDbgSource_GeneralPerformance,
eDbgSource_GCNPerformance,
eDbgSource_RuntimeWarning,
};
enum ResourceUsage
{
eUsage_None,
+1
View File
@@ -105,6 +105,7 @@ class ImageViewer : public IReplayDriver
void ReadLogInitialisation() {}
void RenderMesh(uint32_t frameID, const vector<uint32_t> &events, MeshDisplay cfg) {}
vector<ResourceId> GetBuffers() { return vector<ResourceId>(); }
vector<DebugMessage> GetDebugMessages() { return vector<DebugMessage>(); }
FetchBuffer GetBuffer(ResourceId id) { FetchBuffer ret; RDCEraseEl(ret); return ret; }
void SavePipelineState() {}
GLPipelineState GetGLPipelineState() { return GLPipelineState(); }
+23 -2
View File
@@ -521,7 +521,6 @@ void Serialiser::Serialise(const char *name, FetchDrawcall &el)
Serialise("", el.events);
Serialise("", el.children);
Serialise("", el.debugMessages);
}
template<>
@@ -747,7 +746,7 @@ bool ProxySerialiser::Tick()
GetTexture(ResourceId());
break;
case eCommand_GetBuffers:
GetTextures();
GetBuffers();
break;
case eCommand_GetBuffer:
GetTexture(ResourceId());
@@ -755,6 +754,9 @@ bool ProxySerialiser::Tick()
case eCommand_GetShader:
GetShader(ResourceId());
break;
case eCommand_GetDebugMessages:
GetDebugMessages();
break;
case eCommand_SavePipelineState:
SavePipelineState();
break;
@@ -911,6 +913,25 @@ vector<ResourceId> ProxySerialiser::GetTextures()
return ret;
}
vector<DebugMessage> ProxySerialiser::GetDebugMessages()
{
vector<DebugMessage> ret;
if(m_ReplayHost)
{
ret = m_Remote->GetDebugMessages();
}
else
{
if(!SendReplayCommand(eCommand_GetDebugMessages))
return ret;
}
m_FromReplaySerialiser->Serialise("", ret);
return ret;
}
FetchTexture ProxySerialiser::GetTexture(ResourceId id)
{
FetchTexture ret;
+3
View File
@@ -40,6 +40,7 @@ enum CommandPacketType
eCommand_GetBuffers,
eCommand_GetBuffer,
eCommand_GetShader,
eCommand_GetDebugMessages,
eCommand_GetBufferData,
eCommand_GetTextureData,
@@ -262,6 +263,8 @@ class ProxySerialiser : public IReplayDriver, Callstack::StackResolver
FetchTexture GetTexture(ResourceId id);
APIProperties GetAPIProperties();
vector<DebugMessage> GetDebugMessages();
void SavePipelineState();
D3D11PipelineState GetD3D11PipelineState() { return m_D3D11PipelineState; }
+1
View File
@@ -1230,6 +1230,7 @@ void WrappedID3D11DeviceContext::ReplayLog(LogState readType, uint32_t startEven
if(m_State == READING)
{
m_pDevice->GetFrameRecord().back().drawcallList = m_ParentDrawcall.Bake();
m_pDevice->GetFrameRecord().back().frameInfo.debugMessages = m_pDevice->GetDebugMessages();
m_ParentDrawcall.children.clear();
+1 -1
View File
@@ -229,7 +229,7 @@ private:
const char *GetChunkName(D3D11ChunkType idx);
vector<DebugMessage> Serialise_DebugMessages();
void Serialise_DebugMessages();
void DrainAnnotationQueue();
@@ -391,7 +391,7 @@ bool WrappedID3D11DeviceContext::Serialise_ClearView(ID3D11View *pView, const FL
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -411,7 +411,6 @@ bool WrappedID3D11DeviceContext::Serialise_ClearView(ID3D11View *pView, const FL
draw.flags |= eDraw_Clear;
draw.duration = 0.1f;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
+20 -43
View File
@@ -3284,7 +3284,7 @@ void WrappedID3D11DeviceContext::OMSetDepthStencilState(ID3D11DepthStencilState
#pragma region Draw
vector<DebugMessage> WrappedID3D11DeviceContext::Serialise_DebugMessages()
void WrappedID3D11DeviceContext::Serialise_DebugMessages()
{
SCOPED_SERIALISE_CONTEXT(DEBUG_MESSAGES);
@@ -3347,16 +3347,19 @@ vector<DebugMessage> WrappedID3D11DeviceContext::Serialise_DebugMessages()
if(m_State == READING)
{
DebugMessage msg;
msg.eventID = m_CurEventID;
msg.source = eDbgSource_API;
msg.category = (DebugMessageCategory)Category;
msg.severity = (DebugMessageSeverity)Severity;
msg.messageID = ID;
msg.description = Description;
if(GetType() == D3D11_DEVICE_CONTEXT_DEFERRED)
msg.eventID = m_pDevice->GetImmediateContext()->GetEventID();
debugMessages.push_back(msg);
m_pDevice->AddDebugMessage(msg);
}
}
return debugMessages;
}
@@ -3376,7 +3379,7 @@ bool WrappedID3D11DeviceContext::Serialise_DrawIndexedInstanced(UINT IndexCountP
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -3394,8 +3397,6 @@ bool WrappedID3D11DeviceContext::Serialise_DrawIndexedInstanced(UINT IndexCountP
draw.flags |= eDraw_Drawcall|eDraw_Instanced|eDraw_UseIBuffer;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -3441,7 +3442,7 @@ bool WrappedID3D11DeviceContext::Serialise_DrawInstanced(UINT VertexCountPerInst
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -3458,8 +3459,6 @@ bool WrappedID3D11DeviceContext::Serialise_DrawInstanced(UINT VertexCountPerInst
draw.flags |= eDraw_Drawcall|eDraw_Instanced;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -3503,7 +3502,7 @@ bool WrappedID3D11DeviceContext::Serialise_DrawIndexed(UINT IndexCount_, UINT St
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -3518,8 +3517,6 @@ bool WrappedID3D11DeviceContext::Serialise_DrawIndexed(UINT IndexCount_, UINT St
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -3562,7 +3559,7 @@ bool WrappedID3D11DeviceContext::Serialise_Draw(UINT VertexCount_, UINT StartVer
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -3576,8 +3573,6 @@ bool WrappedID3D11DeviceContext::Serialise_Draw(UINT VertexCount_, UINT StartVer
draw.flags |= eDraw_Drawcall;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -3666,7 +3661,7 @@ bool WrappedID3D11DeviceContext::Serialise_DrawAuto()
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -3682,8 +3677,6 @@ bool WrappedID3D11DeviceContext::Serialise_DrawAuto()
draw.instanceOffset = 0;
draw.numInstances = 1;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -3726,7 +3719,7 @@ bool WrappedID3D11DeviceContext::Serialise_DrawIndexedInstancedIndirect(ID3D11Bu
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -3759,8 +3752,6 @@ bool WrappedID3D11DeviceContext::Serialise_DrawIndexedInstancedIndirect(ID3D11Bu
draw.flags |= eDraw_Drawcall|eDraw_Instanced|eDraw_UseIBuffer|eDraw_Indirect;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -3806,7 +3797,7 @@ bool WrappedID3D11DeviceContext::Serialise_DrawInstancedIndirect(ID3D11Buffer *p
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -3835,8 +3826,6 @@ bool WrappedID3D11DeviceContext::Serialise_DrawInstancedIndirect(ID3D11Buffer *p
draw.flags |= eDraw_Drawcall|eDraw_Instanced|eDraw_Indirect;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -4345,7 +4334,7 @@ bool WrappedID3D11DeviceContext::Serialise_ExecuteCommandList(ID3D11CommandList
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -4355,8 +4344,6 @@ bool WrappedID3D11DeviceContext::Serialise_ExecuteCommandList(ID3D11CommandList
draw.name = name;
draw.flags |= eDraw_CmdList|eDraw_PushMarker;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
auto cmdDrawChildren = m_CmdLists.find(cmdList);
@@ -4443,7 +4430,7 @@ bool WrappedID3D11DeviceContext::Serialise_Dispatch(UINT ThreadGroupCountX_, UIN
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -4457,8 +4444,6 @@ bool WrappedID3D11DeviceContext::Serialise_Dispatch(UINT ThreadGroupCountX_, UIN
draw.name = name;
draw.flags |= eDraw_Dispatch;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -4501,7 +4486,7 @@ bool WrappedID3D11DeviceContext::Serialise_DispatchIndirect(ID3D11Buffer *pBuffe
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -4525,8 +4510,6 @@ bool WrappedID3D11DeviceContext::Serialise_DispatchIndirect(ID3D11Buffer *pBuffe
draw.name = name;
draw.flags |= eDraw_Dispatch|eDraw_Indirect;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -4589,7 +4572,7 @@ bool WrappedID3D11DeviceContext::Serialise_FinishCommandList(BOOL RestoreDeferre
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -4600,8 +4583,6 @@ bool WrappedID3D11DeviceContext::Serialise_FinishCommandList(BOOL RestoreDeferre
draw.name = name;
draw.flags |= eDraw_CmdList;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
m_pDevice->GetImmediateContext()->m_CmdLists[cmdList] = m_ParentDrawcall;
@@ -5447,7 +5428,7 @@ bool WrappedID3D11DeviceContext::Serialise_ClearRenderTargetView(ID3D11RenderTar
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -5463,8 +5444,6 @@ bool WrappedID3D11DeviceContext::Serialise_ClearRenderTargetView(ID3D11RenderTar
draw.name = name;
draw.flags |= eDraw_Clear|eDraw_ClearColour;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
if(m_pDevice->GetResourceManager()->HasLiveResource(View))
@@ -5806,7 +5785,7 @@ bool WrappedID3D11DeviceContext::Serialise_ClearDepthStencilView(ID3D11DepthSten
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -5820,8 +5799,6 @@ bool WrappedID3D11DeviceContext::Serialise_ClearDepthStencilView(ID3D11DepthSten
draw.name = name;
draw.flags |= eDraw_Clear|eDraw_ClearDepth;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
if(m_pDevice->GetResourceManager()->HasLiveResource(View))
+8
View File
@@ -664,6 +664,12 @@ void WrappedID3D11Device::LazyInit()
vector<DebugMessage> WrappedID3D11Device::GetDebugMessages()
{
vector<DebugMessage> ret;
if(m_State < WRITING)
{
ret.swap(m_DebugMessages);
return ret;
}
if(!m_pInfoQueue)
return ret;
@@ -681,6 +687,8 @@ vector<DebugMessage> WrappedID3D11Device::GetDebugMessages()
m_pInfoQueue->GetMessage(i, message, &len);
DebugMessage msg;
msg.eventID = 0;
msg.source = eDbgSource_API;
msg.category = eDbgCategory_Miscellaneous;
msg.severity = eDbgSeverity_Medium;
+3
View File
@@ -213,6 +213,8 @@ private:
vector<double> m_FrameTimes;
double m_TotalTime, m_AvgFrametime, m_MinFrametime, m_MaxFrametime;
vector<DebugMessage> m_DebugMessages;
vector<FetchFrameRecord> m_FrameRecord;
const FetchDrawcall *GetDrawcall(const FetchDrawcall *draw, uint32_t eventID);
public:
@@ -250,6 +252,7 @@ public:
const FetchDrawcall *GetDrawcall(uint32_t frameID, uint32_t eventID);
vector<DebugMessage> GetDebugMessages();
void AddDebugMessage(DebugMessage msg) { m_DebugMessages.push_back(msg); }
const vector<D3D11_INPUT_ELEMENT_DESC> &GetLayoutDesc(ID3D11InputLayout *layout) { return m_LayoutDescs[layout]; }
ShaderReflection *GetLayoutDXBC(ID3D11InputLayout *layout) { return m_LayoutDXBC[layout]; }
+5
View File
@@ -317,6 +317,11 @@ vector<EventUsage> D3D11Replay::GetUsage(ResourceId id)
return m_pDevice->GetImmediateContext()->GetUsage(id);
}
vector<DebugMessage> D3D11Replay::GetDebugMessages()
{
return m_pDevice->GetDebugMessages();
}
APIProperties D3D11Replay::GetAPIProperties()
{
APIProperties ret;
+2
View File
@@ -50,6 +50,8 @@ class D3D11Replay : public IReplayDriver
vector<ResourceId> GetTextures();
FetchTexture GetTexture(ResourceId id);
vector<DebugMessage> GetDebugMessages();
ShaderReflection *GetShader(ResourceId id);
@@ -2551,11 +2551,29 @@ State State::GetNext(GlobalState &global, State quad[4]) const
else
{
RDCERR("Unexpected UAV dimension %d passed to bufinfo", uavDesc.ViewDimension);
DebugMessage msg = {0};
msg.source = eDbgSource_RuntimeWarning;
msg.category = eDbgCategory_Shaders;
msg.severity = eDbgSeverity_Medium;
char time[512] = {0};
StringFormat::sntimef(time, 511, "%H:%M:%S");
msg.description = StringFormat::Fmt("%s- Shader debugging %d: %s\nUAV being queried by bufinfo is not a buffer", time, s.nextInstruction, op.str);
device->AddDebugMessage(msg);
}
}
else
{
RDCERR("UAV is NULL being queried by bufinfo");
DebugMessage msg = {0};
msg.source = eDbgSource_RuntimeWarning;
msg.category = eDbgCategory_Shaders;
msg.severity = eDbgSeverity_Medium;
char time[512] = {0};
StringFormat::sntimef(time, 511, "%H:%M:%S");
msg.description = StringFormat::Fmt("%s- Shader debugging %d: %s\nUAV being queried by bufinfo is NULL", time, s.nextInstruction, op.str);
device->AddDebugMessage(msg);
}
SAFE_RELEASE(uav);
+12 -4
View File
@@ -1778,7 +1778,14 @@ void WrappedOpenGL::FinishCapture()
//m_SuccessfulCapture = false;
}
vector<DebugMessage> WrappedOpenGL::Serialise_DebugMessages()
vector<DebugMessage> WrappedOpenGL::GetDebugMessages()
{
vector<DebugMessage> ret;
ret.swap(m_DebugMessages);
return ret;
}
void WrappedOpenGL::Serialise_DebugMessages()
{
SCOPED_SERIALISE_CONTEXT(DEBUG_MESSAGES);
@@ -1838,16 +1845,16 @@ vector<DebugMessage> WrappedOpenGL::Serialise_DebugMessages()
if(m_State == READING)
{
DebugMessage msg;
msg.eventID = m_CurEventID;
msg.source = eDbgSource_API;
msg.category = (DebugMessageCategory)Category;
msg.severity = (DebugMessageSeverity)Severity;
msg.messageID = ID;
msg.description = Description;
debugMessages.push_back(msg);
m_DebugMessages.push_back(msg);
}
}
return debugMessages;
}
bool WrappedOpenGL::RecordUpdateCheck(GLResourceRecord *record)
@@ -2934,6 +2941,7 @@ void WrappedOpenGL::ContextReplayLog(LogState readType, uint32_t startEventID, u
if(m_State == READING)
{
GetFrameRecord().back().drawcallList = m_ParentDrawcall.Bake();
GetFrameRecord().back().frameInfo.debugMessages = GetDebugMessages();
m_ParentDrawcall.children.clear();
}
+2 -1
View File
@@ -97,7 +97,8 @@ class WrappedOpenGL
const GLHookSet &GetHookset() { return m_Real; }
vector<DebugMessage> m_DebugMessages;
vector<DebugMessage> Serialise_DebugMessages();
void Serialise_DebugMessages();
vector<DebugMessage> GetDebugMessages();
GLDEBUGPROC m_RealDebugFunc;
const void *m_RealDebugFuncParam;
+5
View File
@@ -703,6 +703,11 @@ FetchBuffer GLReplay::GetBuffer(ResourceId id)
return ret;
}
vector<DebugMessage> GLReplay::GetDebugMessages()
{
return m_pDriver->GetDebugMessages();
}
ShaderReflection *GLReplay::GetShader(ResourceId id)
{
WrappedOpenGL &gl = *m_pDriver;
+2
View File
@@ -54,6 +54,8 @@ class GLReplay : public IReplayDriver
ShaderReflection *GetShader(ResourceId id);
vector<DebugMessage> GetDebugMessages();
vector<EventUsage> GetUsage(ResourceId id);
vector<FetchFrameRecord> GetFrameRecord();
+32 -103
View File
@@ -39,7 +39,7 @@ bool WrappedOpenGL::Serialise_glDispatchCompute(GLuint num_groups_x, GLuint num_
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -53,8 +53,6 @@ bool WrappedOpenGL::Serialise_glDispatchCompute(GLuint num_groups_x, GLuint num_
draw.name = name;
draw.flags |= eDraw_Dispatch;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -90,7 +88,7 @@ bool WrappedOpenGL::Serialise_glDispatchComputeGroupSizeARB(GLuint num_groups_x,
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -107,8 +105,6 @@ bool WrappedOpenGL::Serialise_glDispatchComputeGroupSizeARB(GLuint num_groups_x,
draw.name = name;
draw.flags |= eDraw_Dispatch;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -139,7 +135,7 @@ bool WrappedOpenGL::Serialise_glDispatchComputeIndirect(GLintptr indirect)
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -156,8 +152,6 @@ bool WrappedOpenGL::Serialise_glDispatchComputeIndirect(GLintptr indirect)
draw.name = name;
draw.flags |= eDraw_Dispatch|eDraw_Indirect;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -262,7 +256,7 @@ bool WrappedOpenGL::Serialise_glDrawTransformFeedback(GLenum mode, GLuint id)
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -282,8 +276,6 @@ bool WrappedOpenGL::Serialise_glDrawTransformFeedback(GLenum mode, GLuint id)
draw.flags |= eDraw_Drawcall;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -318,7 +310,7 @@ bool WrappedOpenGL::Serialise_glDrawTransformFeedbackInstanced(GLenum mode, GLui
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -338,8 +330,6 @@ bool WrappedOpenGL::Serialise_glDrawTransformFeedbackInstanced(GLenum mode, GLui
draw.flags |= eDraw_Drawcall;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -374,7 +364,7 @@ bool WrappedOpenGL::Serialise_glDrawTransformFeedbackStream(GLenum mode, GLuint
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -394,8 +384,6 @@ bool WrappedOpenGL::Serialise_glDrawTransformFeedbackStream(GLenum mode, GLuint
draw.flags |= eDraw_Drawcall;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -431,7 +419,7 @@ bool WrappedOpenGL::Serialise_glDrawTransformFeedbackStreamInstanced(GLenum mode
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -451,8 +439,6 @@ bool WrappedOpenGL::Serialise_glDrawTransformFeedbackStreamInstanced(GLenum mode
draw.flags |= eDraw_Drawcall;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -488,7 +474,7 @@ bool WrappedOpenGL::Serialise_glDrawArrays(GLenum mode, GLint first, GLsizei cou
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -508,8 +494,6 @@ bool WrappedOpenGL::Serialise_glDrawArrays(GLenum mode, GLint first, GLsizei cou
draw.flags |= eDraw_Drawcall;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -543,7 +527,7 @@ bool WrappedOpenGL::Serialise_glDrawArraysIndirect(GLenum mode, const void *indi
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -567,8 +551,6 @@ bool WrappedOpenGL::Serialise_glDrawArraysIndirect(GLenum mode, const void *indi
draw.flags |= eDraw_Drawcall|eDraw_Instanced|eDraw_Indirect;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -604,7 +586,7 @@ bool WrappedOpenGL::Serialise_glDrawArraysInstanced(GLenum mode, GLint first, GL
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -625,8 +607,6 @@ bool WrappedOpenGL::Serialise_glDrawArraysInstanced(GLenum mode, GLint first, GL
draw.flags |= eDraw_Drawcall|eDraw_Instanced;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -663,7 +643,7 @@ bool WrappedOpenGL::Serialise_glDrawArraysInstancedBaseInstance(GLenum mode, GLi
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -685,8 +665,6 @@ bool WrappedOpenGL::Serialise_glDrawArraysInstancedBaseInstance(GLenum mode, GLi
draw.flags |= eDraw_Drawcall|eDraw_Instanced;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -722,7 +700,7 @@ bool WrappedOpenGL::Serialise_glDrawElements(GLenum mode, GLsizei count, GLenum
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -748,8 +726,6 @@ bool WrappedOpenGL::Serialise_glDrawElements(GLenum mode, GLsizei count, GLenum
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -786,7 +762,7 @@ bool WrappedOpenGL::Serialise_glDrawElementsIndirect(GLenum mode, GLenum type, c
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -817,8 +793,6 @@ bool WrappedOpenGL::Serialise_glDrawElementsIndirect(GLenum mode, GLenum type, c
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer|eDraw_Instanced|eDraw_Indirect;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -857,7 +831,7 @@ bool WrappedOpenGL::Serialise_glDrawRangeElements(GLenum mode, GLuint start, GLu
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -883,8 +857,6 @@ bool WrappedOpenGL::Serialise_glDrawRangeElements(GLenum mode, GLuint start, GLu
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -925,7 +897,7 @@ bool WrappedOpenGL::Serialise_glDrawRangeElementsBaseVertex(GLenum mode, GLuint
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -952,8 +924,6 @@ bool WrappedOpenGL::Serialise_glDrawRangeElementsBaseVertex(GLenum mode, GLuint
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -992,7 +962,7 @@ bool WrappedOpenGL::Serialise_glDrawElementsBaseVertex(GLenum mode, GLsizei coun
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -1019,8 +989,6 @@ bool WrappedOpenGL::Serialise_glDrawElementsBaseVertex(GLenum mode, GLsizei coun
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -1059,7 +1027,7 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstanced(GLenum mode, GLsizei count
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -1086,8 +1054,6 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstanced(GLenum mode, GLsizei count
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -1127,7 +1093,7 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstancedBaseInstance(GLenum mode, G
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -1155,8 +1121,6 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstancedBaseInstance(GLenum mode, G
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -1196,7 +1160,7 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstancedBaseVertex(GLenum mode, GLs
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -1224,8 +1188,6 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstancedBaseVertex(GLenum mode, GLs
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -1266,7 +1228,7 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstancedBaseVertexBaseInstance(GLen
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -1295,8 +1257,6 @@ bool WrappedOpenGL::Serialise_glDrawElementsInstancedBaseVertexBaseInstance(GLen
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -1374,7 +1334,7 @@ bool WrappedOpenGL::Serialise_glMultiDrawArrays(GLenum mode, const GLint *first,
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -1398,9 +1358,6 @@ bool WrappedOpenGL::Serialise_glMultiDrawArrays(GLenum mode, const GLint *first,
draw.numIndices = countArray[i];
draw.vertexOffset = firstArray[i];
if(i == 0)
draw.debugMessages = debugMessages;
draw.name = "glMultiDrawArrays[" + ToStr::Get(i) + "](" +
ToStr::Get(draw.numIndices) + ", " +
ToStr::Get(draw.vertexOffset) + ")";
@@ -1517,7 +1474,7 @@ bool WrappedOpenGL::Serialise_glMultiDrawElements(GLenum mode, const GLsizei *co
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -1543,9 +1500,6 @@ bool WrappedOpenGL::Serialise_glMultiDrawElements(GLenum mode, const GLsizei *co
draw.numIndices = countArray[i];
draw.indexOffset = (uint32_t) uint64_t(idxOffsArray[i])&0xFFFFFFFF;
if(i == 0)
draw.debugMessages = debugMessages;
draw.name = "glMultiDrawElements[" + ToStr::Get(i) + "](" +
ToStr::Get(draw.numIndices) + ", " +
ToStr::Get(draw.indexOffset) + ")";
@@ -1663,7 +1617,7 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsBaseVertex(GLenum mode, const G
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -1690,9 +1644,6 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsBaseVertex(GLenum mode, const G
draw.indexOffset = (uint32_t) uint64_t(idxOffsArray[i])&0xFFFFFFFF;
draw.vertexOffset = baseArray[i];
if(i == 0)
draw.debugMessages = debugMessages;
draw.name = "glMultiDrawElementsBaseVertex[" + ToStr::Get(i) + "](" +
ToStr::Get(draw.numIndices) + ", " +
ToStr::Get(draw.indexOffset) + ", " +
@@ -1800,7 +1751,7 @@ bool WrappedOpenGL::Serialise_glMultiDrawArraysIndirect(GLenum mode, const void
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -1838,9 +1789,6 @@ bool WrappedOpenGL::Serialise_glMultiDrawArraysIndirect(GLenum mode, const void
draw.vertexOffset = params.first;
draw.instanceOffset = params.baseInstance;
if(i == 0)
draw.debugMessages = debugMessages;
draw.name = "glMultiDrawArraysIndirect[" + ToStr::Get(i) + "](<" +
ToStr::Get(draw.numIndices) + ", " +
ToStr::Get(draw.numInstances) + ", " +
@@ -1952,7 +1900,7 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsIndirect(GLenum mode, GLenum ty
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -1992,9 +1940,6 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsIndirect(GLenum mode, GLenum ty
draw.vertexOffset = params.baseVertex;
draw.instanceOffset = params.baseInstance;
if(i == 0)
draw.debugMessages = debugMessages;
draw.name = "glMultiDrawElementsIndirect[" + ToStr::Get(i) + "](<" +
ToStr::Get(draw.numIndices) + ", " +
ToStr::Get(draw.numInstances) + ", " +
@@ -2109,7 +2054,7 @@ bool WrappedOpenGL::Serialise_glMultiDrawArraysIndirectCountARB(GLenum mode, GLi
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -2148,9 +2093,6 @@ bool WrappedOpenGL::Serialise_glMultiDrawArraysIndirectCountARB(GLenum mode, GLi
draw.vertexOffset = params.first;
draw.instanceOffset = params.baseInstance;
if(i == 0)
draw.debugMessages = debugMessages;
draw.name = "glMultiDrawArraysIndirect[" + ToStr::Get(i) + "](<" +
ToStr::Get(draw.numIndices) + ", " +
ToStr::Get(draw.numInstances) + ", " +
@@ -2273,7 +2215,7 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsIndirectCountARB(GLenum mode, G
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -2314,9 +2256,6 @@ bool WrappedOpenGL::Serialise_glMultiDrawElementsIndirectCountARB(GLenum mode, G
draw.vertexOffset = params.baseVertex;
draw.instanceOffset = params.baseInstance;
if(i == 0)
draw.debugMessages = debugMessages;
draw.name = "glMultiDrawElementsIndirect[" + ToStr::Get(i) + "](" +
ToStr::Get(draw.numIndices) + ", " +
ToStr::Get(draw.numInstances) + ", " +
@@ -2382,7 +2321,7 @@ bool WrappedOpenGL::Serialise_glClearBufferfv(GLenum buffer, GLint drawbuffer, c
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -2395,8 +2334,6 @@ bool WrappedOpenGL::Serialise_glClearBufferfv(GLenum buffer, GLint drawbuffer, c
draw.name = name;
draw.flags |= eDraw_Clear;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -2442,7 +2379,7 @@ bool WrappedOpenGL::Serialise_glClearBufferiv(GLenum buffer, GLint drawbuffer, c
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -2455,8 +2392,6 @@ bool WrappedOpenGL::Serialise_glClearBufferiv(GLenum buffer, GLint drawbuffer, c
draw.name = name;
draw.flags |= eDraw_Clear;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -2494,7 +2429,7 @@ bool WrappedOpenGL::Serialise_glClearBufferuiv(GLenum buffer, GLint drawbuffer,
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -2507,8 +2442,6 @@ bool WrappedOpenGL::Serialise_glClearBufferuiv(GLenum buffer, GLint drawbuffer,
draw.name = name;
draw.flags |= eDraw_Clear;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -2540,7 +2473,7 @@ bool WrappedOpenGL::Serialise_glClearBufferfi(GLenum buffer, GLint drawbuffer, G
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -2553,8 +2486,6 @@ bool WrappedOpenGL::Serialise_glClearBufferfi(GLenum buffer, GLint drawbuffer, G
draw.name = name;
draw.flags |= eDraw_Clear;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
@@ -2787,7 +2718,7 @@ bool WrappedOpenGL::Serialise_glClear(GLbitfield mask)
const string desc = m_pSerialiser->GetDebugStr();
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
Serialise_DebugMessages();
if(m_State == READING)
{
@@ -2813,8 +2744,6 @@ bool WrappedOpenGL::Serialise_glClear(GLbitfield mask)
draw.name = name;
draw.flags |= eDraw_Clear;
draw.debugMessages = debugMessages;
AddDrawcall(draw, true);
}
+2
View File
@@ -60,6 +60,8 @@ class IRemoteDriver
virtual vector<ResourceId> GetTextures() = 0;
virtual FetchTexture GetTexture(ResourceId id) = 0;
virtual vector<DebugMessage> GetDebugMessages() = 0;
virtual ShaderReflection *GetShader(ResourceId id) = 0;
virtual vector<EventUsage> GetUsage(ResourceId id) = 0;
+13
View File
@@ -334,6 +334,17 @@ bool ReplayRenderer::GetResolve(uint64_t *callstack, uint32_t callstackLen, rdct
return true;
}
bool ReplayRenderer::GetDebugMessages(rdctype::array<DebugMessage> *msgs)
{
if(msgs)
{
*msgs = m_pDevice->GetDebugMessages();
return true;
}
return false;
}
bool ReplayRenderer::GetUsage(ResourceId id, rdctype::array<EventUsage> *usage)
{
if(usage)
@@ -1481,6 +1492,8 @@ extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetResolve(ReplayRen
{ return rend->GetResolve(callstack, callstackLen, trace); }
extern "C" RENDERDOC_API ShaderReflection* RENDERDOC_CC ReplayRenderer_GetShaderDetails(ReplayRenderer *rend, ResourceId shader)
{ return rend->GetShaderDetails(shader); }
extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetDebugMessages(ReplayRenderer *rend, rdctype::array<DebugMessage> *msgs)
{ return rend->GetDebugMessages(msgs); }
extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_PixelHistory(ReplayRenderer *rend, ResourceId target, uint32_t x, uint32_t y, uint32_t sampleIdx, rdctype::array<PixelModification> *history)
{ return rend->PixelHistory(target, x, y, sampleIdx, history); }
+1
View File
@@ -159,6 +159,7 @@ struct ReplayRenderer
bool GetBuffers(rdctype::array<FetchBuffer> *bufs);
bool GetResolve(uint64_t *callstack, uint32_t callstackLen, rdctype::array<rdctype::str> *trace);
ShaderReflection *GetShaderDetails(ResourceId shader);
bool GetDebugMessages(rdctype::array<DebugMessage> *msgs);
bool PixelHistory(ResourceId target, uint32_t x, uint32_t y, uint32_t sampleIdx, rdctype::array<PixelModification> *history);
bool DebugVertex(uint32_t vertid, uint32_t instid, uint32_t idx, uint32_t instOffset, uint32_t vertOffset, ShaderDebugTrace *trace);
+15
View File
@@ -127,6 +127,15 @@ namespace renderdocui.Code
public FetchTexture[] CurTextures { get { return m_Textures; } }
public FetchBuffer[] CurBuffers { get { return m_Buffers; } }
public List<DebugMessage> DebugMessages = new List<DebugMessage>();
public int UnreadMessageCount = 0;
public void AddMessages(DebugMessage[] msgs)
{
UnreadMessageCount += msgs.Length;
foreach(var msg in msgs)
DebugMessages.Add(msg);
}
// the RenderManager can be used when you want to perform an operation, it will let you Invoke or
// BeginInvoke onto the thread that's used to access the renderdoc project.
public RenderManager Renderer { get { return m_Renderer; } }
@@ -492,6 +501,9 @@ namespace renderdocui.Code
m_GLPipelineState = r.GetGLPipelineState();
m_PipelineState.SetStates(m_APIProperties, m_D3D11PipelineState, m_GLPipelineState);
UnreadMessageCount = 0;
AddMessages(m_FrameInfo[0].debugMessages);
postloadProgress = 1.0f;
});
@@ -556,6 +568,9 @@ namespace renderdocui.Code
m_GLPipelineState = null;
m_PipelineState.SetStates(null, null, null);
DebugMessages.Clear();
UnreadMessageCount = 0;
m_LogLoaded = false;
foreach (var logviewer in m_LogViewers)
+25
View File
@@ -263,6 +263,16 @@ namespace renderdoc
Compute,
};
public enum DebugMessageSource
{
API = 0,
RedundantAPIUse,
IncorrectAPIUse,
GeneralPerformance,
GCNPerformance,
RuntimeWarning,
};
public enum DebugMessageCategory
{
Defined = 0,
@@ -396,6 +406,21 @@ namespace renderdoc
public static class EnumString
{
public static string Str(this DebugMessageSource source)
{
switch (source)
{
case DebugMessageSource.API: return "API's debug messages";
case DebugMessageSource.RedundantAPIUse: return "Redundant use of API";
case DebugMessageSource.IncorrectAPIUse: return "Incorrect use of API";
case DebugMessageSource.GeneralPerformance: return "General Performance issues";
case DebugMessageSource.GCNPerformance: return "GCN (AMD) Performance issues";
case DebugMessageSource.RuntimeWarning: return "Issues raised while debugging";
}
return "Unknown Source";
}
public static string Str(this VarType type)
{
switch (type)
+5 -3
View File
@@ -273,6 +273,9 @@ namespace renderdoc
public UInt64 fileOffset;
public UInt64 captureTime;
public ResourceId immContextId;
[CustomMarshalAs(CustomUnmanagedType.TemplatedArray)]
public DebugMessage[] debugMessages;
};
[StructLayout(LayoutKind.Sequential)]
@@ -294,8 +297,10 @@ namespace renderdoc
[StructLayout(LayoutKind.Sequential)]
public class DebugMessage
{
public UInt32 eventID;
public DebugMessageCategory category;
public DebugMessageSeverity severity;
public DebugMessageSource source;
public UInt32 messageID;
[CustomMarshalAs(CustomUnmanagedType.UTF8TemplatedString)]
public string description;
@@ -347,9 +352,6 @@ namespace renderdoc
public FetchAPIEvent[] events;
[CustomMarshalAs(CustomUnmanagedType.TemplatedArray)]
public FetchDrawcall[] children;
[CustomMarshalAs(CustomUnmanagedType.TemplatedArray)]
public DebugMessage[] debugMessages;
};
[StructLayout(LayoutKind.Sequential)]
+18
View File
@@ -218,6 +218,8 @@ namespace renderdoc
private static extern bool ReplayRenderer_GetResolve(IntPtr real, UInt64[] callstack, UInt32 callstackLen, IntPtr outtrace);
[DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
private static extern IntPtr ReplayRenderer_GetShaderDetails(IntPtr real, ResourceId shader);
[DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
private static extern bool ReplayRenderer_GetDebugMessages(IntPtr real, IntPtr outmsgs);
[DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
private static extern bool ReplayRenderer_PixelHistory(IntPtr real, ResourceId target, UInt32 x, UInt32 y, UInt32 sampleIdx, IntPtr history);
@@ -511,6 +513,22 @@ namespace renderdoc
return ret;
}
public DebugMessage[] GetDebugMessages()
{
IntPtr mem = CustomMarshal.Alloc(typeof(templated_array));
bool success = ReplayRenderer_GetDebugMessages(m_Real, mem);
DebugMessage[] ret = null;
if (success)
ret = (DebugMessage[])CustomMarshal.GetTemplatedArray(mem, typeof(DebugMessage), true);
CustomMarshal.Free(mem);
return ret;
}
public PixelModification[] PixelHistory(ResourceId target, UInt32 x, UInt32 y, UInt32 sampleIdx)
{
IntPtr mem = CustomMarshal.Alloc(typeof(templated_array));
+29 -9
View File
@@ -33,6 +33,7 @@
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DebugMessages));
this.messages = new System.Windows.Forms.DataGridView();
this.dataGridViewTextBoxColumn8 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Source = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.dataGridViewTextBoxColumn9 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.dataGridViewTextBoxColumn10 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.ID = new System.Windows.Forms.DataGridViewTextBoxColumn();
@@ -40,6 +41,7 @@
this.rightClickMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
this.hideIndividual = new System.Windows.Forms.ToolStripMenuItem();
this.hideType = new System.Windows.Forms.ToolStripMenuItem();
this.hideSource = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer();
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.displayHidden = new System.Windows.Forms.ToolStripButton();
@@ -62,6 +64,7 @@
this.messages.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.messages.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.dataGridViewTextBoxColumn8,
this.Source,
this.dataGridViewTextBoxColumn9,
this.dataGridViewTextBoxColumn10,
this.ID,
@@ -81,11 +84,12 @@
this.messages.ReadOnly = true;
this.messages.RowHeadersVisible = false;
this.messages.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.messages.Size = new System.Drawing.Size(547, 314);
this.messages.Size = new System.Drawing.Size(729, 438);
this.messages.TabIndex = 10;
this.messages.VirtualMode = true;
this.messages.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.messages_CellDoubleClick);
this.messages.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.messages_CellFormatting);
this.messages.CellPainting += new System.Windows.Forms.DataGridViewCellPaintingEventHandler(this.messages_CellPainting);
this.messages.CellValueNeeded += new System.Windows.Forms.DataGridViewCellValueEventHandler(this.messages_CellValueNeeded);
this.messages.MouseDown += new System.Windows.Forms.MouseEventHandler(this.messages_MouseDown);
//
@@ -97,6 +101,13 @@
this.dataGridViewTextBoxColumn8.ReadOnly = true;
this.dataGridViewTextBoxColumn8.Width = 50;
//
// Source
//
this.Source.HeaderText = "Source";
this.Source.Name = "Source";
this.Source.ReadOnly = true;
this.Source.Width = 66;
//
// dataGridViewTextBoxColumn9
//
this.dataGridViewTextBoxColumn9.HeaderText = "Severity";
@@ -133,9 +144,10 @@
//
this.rightClickMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.hideIndividual,
this.hideType});
this.hideType,
this.hideSource});
this.rightClickMenu.Name = "rightClickMenu";
this.rightClickMenu.Size = new System.Drawing.Size(238, 48);
this.rightClickMenu.Size = new System.Drawing.Size(238, 70);
this.rightClickMenu.Opening += new System.ComponentModel.CancelEventHandler(this.rightClickMenu_Opening);
//
// hideIndividual
@@ -152,17 +164,24 @@
this.hideType.Text = "Show/Hide this message type";
this.hideType.Click += new System.EventHandler(this.hideType_Click);
//
// hideSource
//
this.hideSource.Name = "hideSource";
this.hideSource.Size = new System.Drawing.Size(237, 22);
this.hideSource.Text = "Show/Hide this message source";
this.hideSource.Click += new System.EventHandler(this.hideSource_Click);
//
// toolStripContainer1
//
//
// toolStripContainer1.ContentPanel
//
this.toolStripContainer1.ContentPanel.Controls.Add(this.messages);
this.toolStripContainer1.ContentPanel.Size = new System.Drawing.Size(547, 314);
this.toolStripContainer1.ContentPanel.Size = new System.Drawing.Size(729, 438);
this.toolStripContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.toolStripContainer1.Location = new System.Drawing.Point(0, 0);
this.toolStripContainer1.Name = "toolStripContainer1";
this.toolStripContainer1.Size = new System.Drawing.Size(547, 339);
this.toolStripContainer1.Size = new System.Drawing.Size(729, 463);
this.toolStripContainer1.TabIndex = 11;
this.toolStripContainer1.Text = "toolStripContainer1";
//
@@ -173,11 +192,12 @@
// toolStrip1
//
this.toolStrip1.Dock = System.Windows.Forms.DockStyle.None;
this.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.displayHidden});
this.toolStrip1.Location = new System.Drawing.Point(3, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(140, 25);
this.toolStrip1.Size = new System.Drawing.Size(164, 25);
this.toolStrip1.TabIndex = 0;
//
// displayHidden
@@ -195,11 +215,9 @@
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(547, 339);
this.ClientSize = new System.Drawing.Size(729, 463);
this.Controls.Add(this.toolStripContainer1);
this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.Name = "DebugMessages";
this.Text = "API Debug Messages";
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.DebugMessages_FormClosed);
this.Shown += new System.EventHandler(this.DebugMessages_Shown);
((System.ComponentModel.ISupportInitialize)(this.messages)).EndInit();
@@ -225,10 +243,12 @@
private System.Windows.Forms.ToolStripMenuItem hideIndividual;
private System.Windows.Forms.ToolStripMenuItem hideType;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn8;
private System.Windows.Forms.DataGridViewTextBoxColumn Source;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn9;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn10;
private System.Windows.Forms.DataGridViewTextBoxColumn ID;
private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn12;
private System.Windows.Forms.ToolStripMenuItem hideSource;
}
}
+90 -54
View File
@@ -41,16 +41,8 @@ namespace renderdocui.Windows
{
private Core m_Core;
struct DebugMessage
{
public DebugMessage(int i, UInt32 e, renderdoc.DebugMessage m) { Index = i; EventID = e; Message = m; }
public int Index;
public UInt32 EventID;
public renderdoc.DebugMessage Message;
};
List<DebugMessage> m_Messages = new List<DebugMessage>();
List<int> m_VisibleMessages = new List<int>();
int m_NumMessages = 0;
public DebugMessages(Core core)
{
@@ -59,49 +51,28 @@ namespace renderdocui.Windows
Icon = global::renderdocui.Properties.Resources.icon;
m_Core = core;
RefreshMessageList();
}
public void OnLogfileClosed()
{
m_Messages.Clear();
m_VisibleMessages.Clear();
m_NumMessages = 0;
messages.RowCount = 0;
}
public void AddDebugMessages(FetchDrawcall[] drawcalls)
{
foreach (var draw in drawcalls)
{
if (draw.context != m_Core.FrameInfo[m_Core.CurFrame].immContextId)
continue;
if(draw.children.Length > 0)
AddDebugMessages(draw.children);
if (draw.debugMessages != null)
{
foreach (var msg in draw.debugMessages)
{
int i = m_Messages.Count;
m_VisibleMessages.Add(i);
m_Messages.Add(new DebugMessage(i, draw.eventID, msg));
}
}
}
RefreshMessageList();
}
public void OnLogfileLoaded()
{
m_Messages.Clear();
m_VisibleMessages.Clear();
m_NumMessages = 0;
messages.RowCount = 0;
messages.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells;
for (UInt32 f = 0; f < m_Core.FrameInfo.Length; f++)
AddDebugMessages(m_Core.GetDrawcalls(f));
messages.RowCount = m_Messages.Count;
RefreshMessageList();
}
public void OnEventSelected(UInt32 frameID, UInt32 eventID)
@@ -117,25 +88,36 @@ namespace renderdocui.Windows
private void messages_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex < m_VisibleMessages.Count)
m_Core.SetEventID(null, 0, m_Messages[m_VisibleMessages[e.RowIndex]].EventID);
m_Core.SetEventID(null, 0, m_Core.DebugMessages[m_VisibleMessages[e.RowIndex]].eventID);
}
private bool m_SuppressRefresh = false;
void RefreshMessageList()
public void RefreshMessageList()
{
if (m_SuppressRefresh) return;
// add any new messages as default visible
for (int i = m_NumMessages; i < m_Core.DebugMessages.Count; i++)
m_VisibleMessages.Add(i);
m_NumMessages = m_Core.DebugMessages.Count;
if (displayHidden.Checked)
{
messages.RowCount = 0;
messages.RowCount = m_Messages.Count;
messages.RowCount = m_Core.DebugMessages.Count;
}
else
{
messages.RowCount = 0;
messages.RowCount = m_VisibleMessages.Count;
}
if (m_Core.UnreadMessageCount > 0)
Text = String.Format("({0}) Errors and Warnings", m_Core.UnreadMessageCount);
else
Text = "Errors and Warnings";
}
bool IsRowVisible(int row)
@@ -217,22 +199,59 @@ namespace renderdocui.Windows
int msgIdx = GetMessageIndex(typerow.Index);
renderdoc.DebugMessage msg = m_Messages[msgIdx].Message;
DebugMessage msg = m_Core.DebugMessages[msgIdx];
bool hiderows = IsRowVisible(msgIdx);
m_SuppressRefresh = true;
foreach (var message in m_Messages)
for(int i=0; i < m_Core.DebugMessages.Count; i++)
{
if (message.Message.category == msg.category &&
message.Message.severity == msg.severity &&
message.Message.messageID == msg.messageID)
var message = m_Core.DebugMessages[i];
if (message.category == msg.category &&
message.severity == msg.severity &&
message.messageID == msg.messageID)
{
if (hiderows)
HideRow(message.Index);
HideRow(i);
else
ShowRow(message.Index);
ShowRow(i);
}
}
m_SuppressRefresh = false;
RefreshMessageList();
messages.ClearSelection();
}
}
private void hideSource_Click(object sender, EventArgs e)
{
if (messages.SelectedRows.Count == 1)
{
DataGridViewRow typerow = messages.SelectedRows[0];
int msgIdx = GetMessageIndex(typerow.Index);
DebugMessage msg = m_Core.DebugMessages[msgIdx];
bool hiderows = IsRowVisible(msgIdx);
m_SuppressRefresh = true;
for (int i = 0; i < m_Core.DebugMessages.Count; i++)
{
var message = m_Core.DebugMessages[i];
if (message.source == msg.source)
{
if (hiderows)
HideRow(i);
else
ShowRow(i);
}
}
@@ -271,13 +290,14 @@ namespace renderdocui.Windows
int msgIdx = GetMessageIndex(e.RowIndex);
if (e.ColumnIndex < 0 || e.ColumnIndex >= messages.ColumnCount) return;
if (msgIdx < 0 || msgIdx >= m_Messages.Count) return;
if (msgIdx < 0 || msgIdx >= m_Core.DebugMessages.Count) return;
if (e.ColumnIndex == 0) e.Value = m_Messages[msgIdx].EventID;
if (e.ColumnIndex == 1) e.Value = m_Messages[msgIdx].Message.severity.ToString();
if (e.ColumnIndex == 2) e.Value = m_Messages[msgIdx].Message.category.ToString();
if (e.ColumnIndex == 3) e.Value = m_Messages[msgIdx].Message.messageID.ToString();
if (e.ColumnIndex == 4) e.Value = m_Messages[msgIdx].Message.description;
if (e.ColumnIndex == 0) e.Value = m_Core.DebugMessages[msgIdx].eventID;
if (e.ColumnIndex == 1) e.Value = m_Core.DebugMessages[msgIdx].source.Str();
if (e.ColumnIndex == 2) e.Value = m_Core.DebugMessages[msgIdx].severity.ToString();
if (e.ColumnIndex == 3) e.Value = m_Core.DebugMessages[msgIdx].category.ToString();
if (e.ColumnIndex == 4) e.Value = m_Core.DebugMessages[msgIdx].messageID.ToString();
if (e.ColumnIndex == 5) e.Value = m_Core.DebugMessages[msgIdx].description;
}
private void messages_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
@@ -285,14 +305,30 @@ namespace renderdocui.Windows
int msgIdx = GetMessageIndex(e.RowIndex);
if (e.ColumnIndex < 0 || e.ColumnIndex >= messages.ColumnCount) return;
if (msgIdx < 0 || msgIdx >= m_Messages.Count) return;
if (msgIdx < 0 || msgIdx >= m_Core.DebugMessages.Count) return;
if (!IsRowVisible(msgIdx)) e.CellStyle.BackColor = Color.Salmon;
if (!IsRowVisible(msgIdx))
e.CellStyle.BackColor = Color.Salmon;
else if (m_Core.DebugMessages[msgIdx].source == DebugMessageSource.RuntimeWarning)
e.CellStyle.BackColor = Color.Aquamarine;
}
private void DebugMessages_FormClosed(object sender, FormClosedEventArgs e)
{
m_Core.RemoveLogViewer(this);
}
private void messages_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
// use BeginInvoke so we don't resize the messages mid-paint
this.BeginInvoke(new Action(() =>
{
if (m_Core.UnreadMessageCount > 0)
{
m_Core.UnreadMessageCount = 0;
RefreshMessageList();
}
}));
}
}
}
+3
View File
@@ -120,6 +120,9 @@
<metadata name="dataGridViewTextBoxColumn8.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Source.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewTextBoxColumn9.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
+102 -88
View File
@@ -28,21 +28,21 @@
/// </summary>
private void InitializeComponent()
{
WeifenLuo.WinFormsUI.Docking.DockPanelSkin dockPanelSkin1 = new WeifenLuo.WinFormsUI.Docking.DockPanelSkin();
WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin autoHideStripSkin1 = new WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin();
WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient1 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin dockPaneStripSkin1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin();
WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient dockPaneStripGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient2 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient2 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient3 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient dockPaneStripToolWindowGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient4 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient5 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient3 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient6 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient7 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPanelSkin dockPanelSkin4 = new WeifenLuo.WinFormsUI.Docking.DockPanelSkin();
WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin autoHideStripSkin4 = new WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin();
WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient10 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient22 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin dockPaneStripSkin4 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin();
WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient dockPaneStripGradient4 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient23 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient11 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient24 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient dockPaneStripToolWindowGradient4 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient25 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient26 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient12 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient27 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient28 = new WeifenLuo.WinFormsUI.Docking.TabGradient();
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.captureLogToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -81,6 +81,7 @@
this.layoutLoad5 = new System.Windows.Forms.ToolStripMenuItem();
this.layoutLoad6 = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.pythonShellToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.eventViewerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.textureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.D3D11PipelineStateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -106,11 +107,11 @@
this.openDialog = new System.Windows.Forms.OpenFileDialog();
this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer();
this.statusStrip = new System.Windows.Forms.StatusStrip();
this.statusIcon = new System.Windows.Forms.ToolStripStatusLabel();
this.statusText = new System.Windows.Forms.ToolStripStatusLabel();
this.statusProgress = new System.Windows.Forms.ToolStripProgressBar();
this.dockPanel = new WeifenLuo.WinFormsUI.Docking.DockPanel();
this.saveDialog = new System.Windows.Forms.SaveFileDialog();
this.pythonShellToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.menuStrip1.SuspendLayout();
this.toolStripContainer1.BottomToolStripPanel.SuspendLayout();
this.toolStripContainer1.ContentPanel.SuspendLayout();
@@ -294,13 +295,13 @@
this.layoutSave5,
this.layoutSave6});
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
this.toolStripMenuItem1.Size = new System.Drawing.Size(155, 22);
this.toolStripMenuItem1.Size = new System.Drawing.Size(192, 22);
this.toolStripMenuItem1.Text = "&Save Layout";
//
// layoutSaveDefault
//
this.layoutSaveDefault.Name = "layoutSaveDefault";
this.layoutSaveDefault.Size = new System.Drawing.Size(152, 22);
this.layoutSaveDefault.Size = new System.Drawing.Size(145, 22);
this.layoutSaveDefault.Tag = "0";
this.layoutSaveDefault.Text = "&Default Layout";
this.layoutSaveDefault.Click += new System.EventHandler(this.saveLayout_Click);
@@ -308,12 +309,12 @@
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
this.toolStripSeparator3.Size = new System.Drawing.Size(149, 6);
this.toolStripSeparator3.Size = new System.Drawing.Size(142, 6);
//
// layoutSave1
//
this.layoutSave1.Name = "layoutSave1";
this.layoutSave1.Size = new System.Drawing.Size(152, 22);
this.layoutSave1.Size = new System.Drawing.Size(145, 22);
this.layoutSave1.Tag = "1";
this.layoutSave1.Text = "Layout &1";
this.layoutSave1.Click += new System.EventHandler(this.saveLayout_Click);
@@ -321,7 +322,7 @@
// layoutSave2
//
this.layoutSave2.Name = "layoutSave2";
this.layoutSave2.Size = new System.Drawing.Size(152, 22);
this.layoutSave2.Size = new System.Drawing.Size(145, 22);
this.layoutSave2.Tag = "2";
this.layoutSave2.Text = "Layout &2";
this.layoutSave2.Click += new System.EventHandler(this.saveLayout_Click);
@@ -329,7 +330,7 @@
// layoutSave3
//
this.layoutSave3.Name = "layoutSave3";
this.layoutSave3.Size = new System.Drawing.Size(152, 22);
this.layoutSave3.Size = new System.Drawing.Size(145, 22);
this.layoutSave3.Tag = "3";
this.layoutSave3.Text = "Layout &3";
this.layoutSave3.Click += new System.EventHandler(this.saveLayout_Click);
@@ -337,7 +338,7 @@
// layoutSave4
//
this.layoutSave4.Name = "layoutSave4";
this.layoutSave4.Size = new System.Drawing.Size(152, 22);
this.layoutSave4.Size = new System.Drawing.Size(145, 22);
this.layoutSave4.Tag = "4";
this.layoutSave4.Text = "Layout &4";
this.layoutSave4.Click += new System.EventHandler(this.saveLayout_Click);
@@ -345,7 +346,7 @@
// layoutSave5
//
this.layoutSave5.Name = "layoutSave5";
this.layoutSave5.Size = new System.Drawing.Size(152, 22);
this.layoutSave5.Size = new System.Drawing.Size(145, 22);
this.layoutSave5.Tag = "5";
this.layoutSave5.Text = "Layout &5";
this.layoutSave5.Click += new System.EventHandler(this.saveLayout_Click);
@@ -353,7 +354,7 @@
// layoutSave6
//
this.layoutSave6.Name = "layoutSave6";
this.layoutSave6.Size = new System.Drawing.Size(152, 22);
this.layoutSave6.Size = new System.Drawing.Size(145, 22);
this.layoutSave6.Tag = "6";
this.layoutSave6.Text = "Layout &6";
this.layoutSave6.Click += new System.EventHandler(this.saveLayout_Click);
@@ -370,7 +371,7 @@
this.layoutLoad5,
this.layoutLoad6});
this.saveLayoutToolStripMenuItem.Name = "saveLayoutToolStripMenuItem";
this.saveLayoutToolStripMenuItem.Size = new System.Drawing.Size(155, 22);
this.saveLayoutToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
this.saveLayoutToolStripMenuItem.Text = "&Load Layout";
//
// layoutLoadDefault
@@ -437,54 +438,61 @@
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(152, 6);
this.toolStripSeparator1.Size = new System.Drawing.Size(189, 6);
//
// pythonShellToolStripMenuItem
//
this.pythonShellToolStripMenuItem.Name = "pythonShellToolStripMenuItem";
this.pythonShellToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
this.pythonShellToolStripMenuItem.Text = "P&ython Shell";
this.pythonShellToolStripMenuItem.Click += new System.EventHandler(this.pythonShellToolStripMenuItem_Click);
//
// eventViewerToolStripMenuItem
//
this.eventViewerToolStripMenuItem.Name = "eventViewerToolStripMenuItem";
this.eventViewerToolStripMenuItem.Size = new System.Drawing.Size(155, 22);
this.eventViewerToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
this.eventViewerToolStripMenuItem.Text = "&Event Viewer";
this.eventViewerToolStripMenuItem.Click += new System.EventHandler(this.eventViewerToolStripMenuItem_Click);
//
// textureToolStripMenuItem
//
this.textureToolStripMenuItem.Name = "textureToolStripMenuItem";
this.textureToolStripMenuItem.Size = new System.Drawing.Size(155, 22);
this.textureToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
this.textureToolStripMenuItem.Text = "&Texture Viewer";
this.textureToolStripMenuItem.Click += new System.EventHandler(this.textureToolStripMenuItem_Click);
//
// D3D11PipelineStateToolStripMenuItem
//
this.D3D11PipelineStateToolStripMenuItem.Name = "D3D11PipelineStateToolStripMenuItem";
this.D3D11PipelineStateToolStripMenuItem.Size = new System.Drawing.Size(155, 22);
this.D3D11PipelineStateToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
this.D3D11PipelineStateToolStripMenuItem.Text = "&Pipeline State";
this.D3D11PipelineStateToolStripMenuItem.Click += new System.EventHandler(this.PipelineStateToolStripMenuItem_Click);
//
// aPIInspectorToolStripMenuItem
//
this.aPIInspectorToolStripMenuItem.Name = "aPIInspectorToolStripMenuItem";
this.aPIInspectorToolStripMenuItem.Size = new System.Drawing.Size(155, 22);
this.aPIInspectorToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
this.aPIInspectorToolStripMenuItem.Text = "&API Inspector";
this.aPIInspectorToolStripMenuItem.Click += new System.EventHandler(this.APIInspectorToolStripMenuItem_Click);
//
// meshOutputToolStripMenuItem
//
this.meshOutputToolStripMenuItem.Name = "meshOutputToolStripMenuItem";
this.meshOutputToolStripMenuItem.Size = new System.Drawing.Size(155, 22);
this.meshOutputToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
this.meshOutputToolStripMenuItem.Text = "&Mesh Output";
this.meshOutputToolStripMenuItem.Click += new System.EventHandler(this.meshOutputToolStripMenuItem_Click);
//
// debugMessagesToolStripMenuItem
//
this.debugMessagesToolStripMenuItem.Name = "debugMessagesToolStripMenuItem";
this.debugMessagesToolStripMenuItem.Size = new System.Drawing.Size(155, 22);
this.debugMessagesToolStripMenuItem.Text = "&Debug Messages";
this.debugMessagesToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
this.debugMessagesToolStripMenuItem.Text = "Log Errors and &Warnings";
this.debugMessagesToolStripMenuItem.Click += new System.EventHandler(this.debugMessagesToolStripMenuItem_Click);
//
// timelineToolStripMenuItem
//
this.timelineToolStripMenuItem.Name = "timelineToolStripMenuItem";
this.timelineToolStripMenuItem.Size = new System.Drawing.Size(155, 22);
this.timelineToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
this.timelineToolStripMenuItem.Text = "T&imeline";
this.timelineToolStripMenuItem.Click += new System.EventHandler(this.timelineToolStripMenuItem_Click);
//
@@ -641,6 +649,7 @@
//
this.statusStrip.Dock = System.Windows.Forms.DockStyle.None;
this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.statusIcon,
this.statusText,
this.statusProgress});
this.statusStrip.Location = new System.Drawing.Point(0, 0);
@@ -648,11 +657,22 @@
this.statusStrip.Size = new System.Drawing.Size(1272, 22);
this.statusStrip.TabIndex = 0;
//
// statusIcon
//
this.statusIcon.AutoSize = false;
this.statusIcon.DoubleClickEnabled = true;
this.statusIcon.Name = "statusIcon";
this.statusIcon.Size = new System.Drawing.Size(20, 17);
this.statusIcon.Text = "Icon";
this.statusIcon.DoubleClick += new System.EventHandler(this.status_DoubleClick);
//
// statusText
//
this.statusText.DoubleClickEnabled = true;
this.statusText.Name = "statusText";
this.statusText.Size = new System.Drawing.Size(63, 17);
this.statusText.Text = "Status Text";
this.statusText.DoubleClick += new System.EventHandler(this.status_DoubleClick);
//
// statusProgress
//
@@ -673,52 +693,52 @@
this.dockPanel.Location = new System.Drawing.Point(0, 0);
this.dockPanel.Name = "dockPanel";
this.dockPanel.Size = new System.Drawing.Size(1272, 727);
dockPanelGradient1.EndColor = System.Drawing.SystemColors.ControlLight;
dockPanelGradient1.StartColor = System.Drawing.SystemColors.ControlLight;
autoHideStripSkin1.DockStripGradient = dockPanelGradient1;
tabGradient1.EndColor = System.Drawing.SystemColors.Control;
tabGradient1.StartColor = System.Drawing.SystemColors.Control;
tabGradient1.TextColor = System.Drawing.SystemColors.ControlDarkDark;
autoHideStripSkin1.TabGradient = tabGradient1;
autoHideStripSkin1.TextFont = new System.Drawing.Font("Tahoma", 8.25F);
dockPanelSkin1.AutoHideStripSkin = autoHideStripSkin1;
tabGradient2.EndColor = System.Drawing.SystemColors.ControlLightLight;
tabGradient2.StartColor = System.Drawing.SystemColors.ControlLightLight;
tabGradient2.TextColor = System.Drawing.SystemColors.ControlText;
dockPaneStripGradient1.ActiveTabGradient = tabGradient2;
dockPanelGradient2.EndColor = System.Drawing.SystemColors.Control;
dockPanelGradient2.StartColor = System.Drawing.SystemColors.Control;
dockPaneStripGradient1.DockStripGradient = dockPanelGradient2;
tabGradient3.EndColor = System.Drawing.SystemColors.ControlLight;
tabGradient3.StartColor = System.Drawing.SystemColors.ControlLight;
tabGradient3.TextColor = System.Drawing.SystemColors.ControlText;
dockPaneStripGradient1.InactiveTabGradient = tabGradient3;
dockPaneStripSkin1.DocumentGradient = dockPaneStripGradient1;
dockPaneStripSkin1.TextFont = new System.Drawing.Font("Tahoma", 8.25F);
tabGradient4.EndColor = System.Drawing.SystemColors.ActiveCaption;
tabGradient4.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
tabGradient4.StartColor = System.Drawing.SystemColors.GradientActiveCaption;
tabGradient4.TextColor = System.Drawing.SystemColors.ActiveCaptionText;
dockPaneStripToolWindowGradient1.ActiveCaptionGradient = tabGradient4;
tabGradient5.EndColor = System.Drawing.SystemColors.Control;
tabGradient5.StartColor = System.Drawing.SystemColors.Control;
tabGradient5.TextColor = System.Drawing.SystemColors.ControlText;
dockPaneStripToolWindowGradient1.ActiveTabGradient = tabGradient5;
dockPanelGradient3.EndColor = System.Drawing.SystemColors.ControlLight;
dockPanelGradient3.StartColor = System.Drawing.SystemColors.ControlLight;
dockPaneStripToolWindowGradient1.DockStripGradient = dockPanelGradient3;
tabGradient6.EndColor = System.Drawing.SystemColors.InactiveCaption;
tabGradient6.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
tabGradient6.StartColor = System.Drawing.SystemColors.GradientInactiveCaption;
tabGradient6.TextColor = System.Drawing.SystemColors.InactiveCaptionText;
dockPaneStripToolWindowGradient1.InactiveCaptionGradient = tabGradient6;
tabGradient7.EndColor = System.Drawing.Color.Transparent;
tabGradient7.StartColor = System.Drawing.Color.Transparent;
tabGradient7.TextColor = System.Drawing.SystemColors.ControlDarkDark;
dockPaneStripToolWindowGradient1.InactiveTabGradient = tabGradient7;
dockPaneStripSkin1.ToolWindowGradient = dockPaneStripToolWindowGradient1;
dockPanelSkin1.DockPaneStripSkin = dockPaneStripSkin1;
this.dockPanel.Skin = dockPanelSkin1;
dockPanelGradient10.EndColor = System.Drawing.SystemColors.ControlLight;
dockPanelGradient10.StartColor = System.Drawing.SystemColors.ControlLight;
autoHideStripSkin4.DockStripGradient = dockPanelGradient10;
tabGradient22.EndColor = System.Drawing.SystemColors.Control;
tabGradient22.StartColor = System.Drawing.SystemColors.Control;
tabGradient22.TextColor = System.Drawing.SystemColors.ControlDarkDark;
autoHideStripSkin4.TabGradient = tabGradient22;
autoHideStripSkin4.TextFont = new System.Drawing.Font("Tahoma", 8.25F);
dockPanelSkin4.AutoHideStripSkin = autoHideStripSkin4;
tabGradient23.EndColor = System.Drawing.SystemColors.ControlLightLight;
tabGradient23.StartColor = System.Drawing.SystemColors.ControlLightLight;
tabGradient23.TextColor = System.Drawing.SystemColors.ControlText;
dockPaneStripGradient4.ActiveTabGradient = tabGradient23;
dockPanelGradient11.EndColor = System.Drawing.SystemColors.Control;
dockPanelGradient11.StartColor = System.Drawing.SystemColors.Control;
dockPaneStripGradient4.DockStripGradient = dockPanelGradient11;
tabGradient24.EndColor = System.Drawing.SystemColors.ControlLight;
tabGradient24.StartColor = System.Drawing.SystemColors.ControlLight;
tabGradient24.TextColor = System.Drawing.SystemColors.ControlText;
dockPaneStripGradient4.InactiveTabGradient = tabGradient24;
dockPaneStripSkin4.DocumentGradient = dockPaneStripGradient4;
dockPaneStripSkin4.TextFont = new System.Drawing.Font("Tahoma", 8.25F);
tabGradient25.EndColor = System.Drawing.SystemColors.ActiveCaption;
tabGradient25.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
tabGradient25.StartColor = System.Drawing.SystemColors.GradientActiveCaption;
tabGradient25.TextColor = System.Drawing.SystemColors.ActiveCaptionText;
dockPaneStripToolWindowGradient4.ActiveCaptionGradient = tabGradient25;
tabGradient26.EndColor = System.Drawing.SystemColors.Control;
tabGradient26.StartColor = System.Drawing.SystemColors.Control;
tabGradient26.TextColor = System.Drawing.SystemColors.ControlText;
dockPaneStripToolWindowGradient4.ActiveTabGradient = tabGradient26;
dockPanelGradient12.EndColor = System.Drawing.SystemColors.ControlLight;
dockPanelGradient12.StartColor = System.Drawing.SystemColors.ControlLight;
dockPaneStripToolWindowGradient4.DockStripGradient = dockPanelGradient12;
tabGradient27.EndColor = System.Drawing.SystemColors.InactiveCaption;
tabGradient27.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
tabGradient27.StartColor = System.Drawing.SystemColors.GradientInactiveCaption;
tabGradient27.TextColor = System.Drawing.SystemColors.InactiveCaptionText;
dockPaneStripToolWindowGradient4.InactiveCaptionGradient = tabGradient27;
tabGradient28.EndColor = System.Drawing.Color.Transparent;
tabGradient28.StartColor = System.Drawing.Color.Transparent;
tabGradient28.TextColor = System.Drawing.SystemColors.ControlDarkDark;
dockPaneStripToolWindowGradient4.InactiveTabGradient = tabGradient28;
dockPaneStripSkin4.ToolWindowGradient = dockPaneStripToolWindowGradient4;
dockPanelSkin4.DockPaneStripSkin = dockPaneStripSkin4;
this.dockPanel.Skin = dockPanelSkin4;
this.dockPanel.TabIndex = 0;
//
// saveDialog
@@ -727,13 +747,6 @@
this.saveDialog.Filter = "Log Files (*.rdc)|*.rdc";
this.saveDialog.Title = "Save Log As";
//
// pythonShellToolStripMenuItem
//
this.pythonShellToolStripMenuItem.Name = "pythonShellToolStripMenuItem";
this.pythonShellToolStripMenuItem.Size = new System.Drawing.Size(155, 22);
this.pythonShellToolStripMenuItem.Text = "P&ython Shell";
this.pythonShellToolStripMenuItem.Click += new System.EventHandler(this.pythonShellToolStripMenuItem_Click);
//
// MainWindow
//
this.AllowDrop = true;
@@ -836,6 +849,7 @@
private System.Windows.Forms.ToolStripMenuItem nightlybuildsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem sourceOnGithubToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem pythonShellToolStripMenuItem;
private System.Windows.Forms.ToolStripStatusLabel statusIcon;
}
}
+82 -1
View File
@@ -135,6 +135,8 @@ namespace renderdocui.Windows
renderdocplugin.PluginHelpers.GetPlugins();
statusIcon.Text = "";
statusIcon.Image = null;
statusText.Text = "";
SetTitle();
@@ -255,6 +257,7 @@ namespace renderdocui.Windows
{
statusProgress.Visible = false;
statusText.Text = "";
statusIcon.Image = null;
}
else
{
@@ -271,8 +274,12 @@ namespace renderdocui.Windows
public void OnLogfileClosed()
{
statusText.Text = "";
statusIcon.Image = null;
statusProgress.Visible = false;
m_MessageTick.Dispose();
m_MessageTick = null;
logStatisticsToolStripMenuItem.Enabled = false;
resolveSymbolsToolStripMenuItem.Enabled = false;
@@ -287,9 +294,82 @@ namespace renderdocui.Windows
SetTitle();
}
private static void MessageCheck(object m)
{
if (!(m is MainWindow)) return;
var me = (MainWindow)m;
if (me.m_Core.LogLoaded)
{
me.m_Core.Renderer.BeginInvoke((ReplayRenderer r) =>
{
DebugMessage[] msgs = r.GetDebugMessages();
me.BeginInvoke(new Action(() =>
{
if (msgs.Length > 0)
{
me.m_Core.AddMessages(msgs);
me.m_Core.GetDebugMessages().RefreshMessageList();
}
if (me.m_Core.UnreadMessageCount > 0)
{
me.m_MessageAlternate = !me.m_MessageAlternate;
}
else
{
me.m_MessageAlternate = false;
}
me.LogHasErrors = (me.m_Core.DebugMessages.Count > 0);
}));
});
}
if (me == null) return;
if (me.m_MessageTick != null) me.m_MessageTick.Change(500, System.Threading.Timeout.Infinite);
}
private System.Threading.Timer m_MessageTick = null;
private bool m_MessageAlternate = false;
private bool LogHasErrors
{
set
{
if (value == true)
{
statusIcon.Image = m_MessageAlternate
? null
: global::renderdocui.Properties.Resources.delete;
statusText.Text = String.Format("{0} loaded. Log has {1} errors, warnings or performance notes. " +
"See the 'Log Errors and Warnings' window.", Path.GetFileName(m_Core.LogFileName), m_Core.DebugMessages.Count);
if (m_Core.UnreadMessageCount > 0)
{
statusText.Text += String.Format(" {0} Unread.", m_Core.UnreadMessageCount);
}
}
else
{
statusIcon.Image = global::renderdocui.Properties.Resources.tick;
statusText.Text = String.Format("{0} loaded. No problems detected.", Path.GetFileName(m_Core.LogFileName));
}
}
}
private void status_DoubleClick(object sender, EventArgs e)
{
m_Core.GetDebugMessages().Show(dockPanel);
}
public void OnLogfileLoaded()
{
statusText.Text = "";
LogHasErrors = (m_Core.DebugMessages.Count > 0);
m_MessageTick = new System.Threading.Timer(MessageCheck, this as object, 500, System.Threading.Timeout.Infinite);
statusProgress.Visible = false;
m_Core.Renderer.BeginInvoke((ReplayRenderer r) => {
@@ -670,6 +750,7 @@ namespace renderdocui.Windows
BeginInvoke(new Action(() =>
{
statusText.Text = "";
statusIcon.Image = null;
statusProgress.Visible = false;
}));
}));