Fetch structured file on capture load so it's available persistently

This commit is contained in:
baldurk
2017-11-14 18:08:05 +00:00
parent 3ac3e6c3f1
commit 152abc501a
5 changed files with 62 additions and 44 deletions
+16 -6
View File
@@ -61,6 +61,13 @@ CaptureContext::CaptureContext(QString paramFilename, QString remoteHost, uint32
memset(&m_APIProps, 0, sizeof(m_APIProps));
m_CurD3D11PipelineState = &m_DummyD3D11;
m_CurD3D12PipelineState = &m_DummyD3D12;
m_CurGLPipelineState = &m_DummyGL;
m_CurVulkanPipelineState = &m_DummyVK;
m_StructuredFile = &m_DummySDFile;
qApp->setApplicationVersion(QString::fromLatin1(RENDERDOC_GetVersionString()));
m_Icon = new QIcon();
@@ -252,6 +259,8 @@ void CaptureContext::LoadLogfileThreaded(const QString &logFile, const QString &
m_X11Display = QX11Info::display();
#endif
m_StructuredFile = &r->GetStructuredFile();
m_BufferList = r->GetBuffers();
for(BufferDescription &b : m_BufferList)
m_Buffers[b.ID] = &b;
@@ -532,12 +541,13 @@ void CaptureContext::CloseLogfile()
m_Drawcalls.clear();
m_FirstDrawcall = m_LastDrawcall = NULL;
m_CurD3D11PipelineState = NULL;
m_CurD3D12PipelineState = NULL;
m_CurGLPipelineState = NULL;
m_CurVulkanPipelineState = NULL;
m_CurPipelineState.SetStates(m_APIProps, m_CurD3D11PipelineState, m_CurD3D12PipelineState,
m_CurGLPipelineState, m_CurVulkanPipelineState);
m_CurD3D11PipelineState = &m_DummyD3D11;
m_CurD3D12PipelineState = &m_DummyD3D12;
m_CurGLPipelineState = &m_DummyGL;
m_CurVulkanPipelineState = &m_DummyVK;
m_CurPipelineState.SetStates(m_APIProps, NULL, NULL, NULL, NULL);
m_StructuredFile = &m_DummySDFile;
m_DebugMessages.clear();
m_UnreadMessageCount = 0;
+9 -1
View File
@@ -117,7 +117,7 @@ public:
{
return GetDrawcall(m_Drawcalls, eventID);
}
const SDFile &GetStructuredFile() override { return *m_StructuredFile; }
WindowingSystem CurWindowingSystem() override { return m_CurWinSystem; }
void *FillWindowingData(uintptr_t winId) override;
@@ -205,6 +205,11 @@ private:
const VKPipe::State *m_CurVulkanPipelineState;
CommonPipelineState m_CurPipelineState;
D3D11Pipe::State m_DummyD3D11;
D3D12Pipe::State m_DummyD3D12;
GLPipe::State m_DummyGL;
VKPipe::State m_DummyVK;
PersistantConfig &m_Config;
QVector<ILogViewer *> m_LogViewers;
@@ -261,6 +266,9 @@ private:
QMap<ResourceId, BufferDescription *> m_Buffers;
rdcarray<BufferDescription> m_BufferList;
const SDFile *m_StructuredFile;
SDFile m_DummySDFile;
rdcarray<WindowingSystem> m_WinSystems;
WindowingSystem m_CurWinSystem;
+8 -1
View File
@@ -1054,6 +1054,13 @@ more information for how this differs.
)");
virtual const DrawcallDescription *GetDrawcall(uint32_t eventID) = 0;
DOCUMENT(R"(Retrieve the :class:`~renderdoc.SDFile` for the currently open capture.
:return: The structured file.
:rtype: ~renderdoc.SDFile
)");
virtual const SDFile &GetStructuredFile() = 0;
DOCUMENT(R"(Retrieve the current windowing system in use.
:return: The active windowing system.
@@ -1127,7 +1134,7 @@ as well as messages generated during replay and analysis.
)");
virtual ITextureViewer *GetTextureViewer() = 0;
DOCUMENT(R"(Retrieve the current singleton :class:`BufferViewer`.
DOCUMENT(R"(Retrieve the current singleton :class:`BufferViewer` configured for mesh viewing.
:return: The current window, which is created (but not shown) it there wasn't one open.
:rtype: BufferViewer
+28 -36
View File
@@ -23,7 +23,6 @@
******************************************************************************/
#include "APIInspector.h"
#include <QRegularExpression>
#include "ui_APIInspector.h"
Q_DECLARE_METATYPE(APIEvent);
@@ -132,47 +131,40 @@ void APIInspector::fillAPIView()
ui->apiEvents->setUpdatesEnabled(false);
ui->apiEvents->clear();
QRegularExpression rgxopen(lit("^\\s*{"));
QRegularExpression rgxclose(lit("^\\s*}"));
const SDFile &file = m_Ctx.GetStructuredFile();
const DrawcallDescription *draw = m_Ctx.CurSelectedDrawcall();
m_Ctx.Replay().AsyncInvoke([this](IReplayController *r) {
const SDFile &file = r->GetStructuredFile();
if(draw != NULL && !draw->events.isEmpty())
{
for(const APIEvent &ev : draw->events)
{
RDTreeWidgetItem *root = new RDTreeWidgetItem({QString::number(ev.eventID), QString()});
GUIInvoke::call([this, &file]() {
const DrawcallDescription *draw = m_Ctx.CurSelectedDrawcall();
if(draw != NULL && !draw->events.isEmpty())
if(ev.chunkIndex < file.chunks.size())
{
for(const APIEvent &ev : draw->events)
{
RDTreeWidgetItem *root = new RDTreeWidgetItem({QString::number(ev.eventID), QString()});
SDChunk *chunk = file.chunks[ev.chunkIndex];
if(ev.chunkIndex < file.chunks.size())
{
SDChunk *chunk = file.chunks[ev.chunkIndex];
root->setText(1, chunk->name);
root->setText(1, chunk->name);
addObjects(root, chunk->data.children, false);
}
else
{
root->setText(1, tr("Invalid chunk index %1").arg(ev.chunkIndex));
}
if(ev.eventID == draw->eventID)
root->setBold(true);
root->setTag(QVariant::fromValue(ev));
ui->apiEvents->addTopLevelItem(root);
ui->apiEvents->setSelectedItem(root);
}
addObjects(root, chunk->data.children, false);
}
ui->apiEvents->setUpdatesEnabled(true);
});
});
else
{
root->setText(1, tr("Invalid chunk index %1").arg(ev.chunkIndex));
}
if(ev.eventID == draw->eventID)
root->setBold(true);
root->setTag(QVariant::fromValue(ev));
ui->apiEvents->addTopLevelItem(root);
ui->apiEvents->setSelectedItem(root);
}
}
ui->apiEvents->setUpdatesEnabled(true);
}
void APIInspector::addObjects(RDTreeWidgetItem *parent, const StructuredObjectList &objs,
+1
View File
@@ -85,6 +85,7 @@ struct CaptureContextInvoker : ICaptureContext
{
return m_Ctx.GetDrawcall(eventID);
}
virtual const SDFile &GetStructuredFile() override { return m_Ctx.GetStructuredFile(); }
virtual WindowingSystem CurWindowingSystem() override { return m_Ctx.CurWindowingSystem(); }
virtual void *FillWindowingData(uintptr_t winId) override
{