mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-23 06:56:40 +00:00
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:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(); }
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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]; }
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -54,6 +54,8 @@ class GLReplay : public IReplayDriver
|
||||
|
||||
ShaderReflection *GetShader(ResourceId id);
|
||||
|
||||
vector<DebugMessage> GetDebugMessages();
|
||||
|
||||
vector<EventUsage> GetUsage(ResourceId id);
|
||||
|
||||
vector<FetchFrameRecord> GetFrameRecord();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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); }
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)]
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}));
|
||||
}));
|
||||
|
||||
Reference in New Issue
Block a user