Add pipeline state viewer and implement vulkan viewer

* Minus interactions with as-yet-unimplemented windows like buffer and
  shader viewers.
* Also missing HTML export
This commit is contained in:
baldurk
2016-11-24 17:32:17 +01:00
parent 9ab11786b2
commit 6ef7dbb356
22 changed files with 7073 additions and 1 deletions
+46
View File
@@ -38,6 +38,7 @@
#include "Windows/Dialogs/LiveCapture.h"
#include "Windows/EventBrowser.h"
#include "Windows/MainWindow.h"
#include "Windows/PipelineState/PipelineStateViewer.h"
#include "Windows/TextureViewer.h"
#include "QRDUtils.h"
@@ -454,6 +455,18 @@ TextureViewer *CaptureContext::textureViewer()
return m_TextureViewer;
}
PipelineStateViewer *CaptureContext::pipelineViewer()
{
if(m_PipelineViewer)
return m_PipelineViewer;
m_PipelineViewer = new PipelineStateViewer(this, m_MainWindow);
m_PipelineViewer->setObjectName("pipelineViewer");
m_PipelineViewer->setWindowIcon(*m_Icon);
return m_PipelineViewer;
}
CaptureDialog *CaptureContext::captureDialog()
{
if(m_CaptureDialog)
@@ -474,6 +487,31 @@ CaptureDialog *CaptureContext::captureDialog()
return m_CaptureDialog;
}
void CaptureContext::showEventBrowser()
{
m_MainWindow->showEventBrowser();
}
void CaptureContext::showAPIInspector()
{
m_MainWindow->showAPIInspector();
}
void CaptureContext::showTextureViewer()
{
m_MainWindow->showTextureViewer();
}
void CaptureContext::showPipelineViewer()
{
m_MainWindow->showPipelineViewer();
}
void CaptureContext::showCaptureDialog()
{
m_MainWindow->showCaptureDialog();
}
QWidget *CaptureContext::createToolWindow(const QString &objectName)
{
if(objectName == "textureViewer")
@@ -484,6 +522,10 @@ QWidget *CaptureContext::createToolWindow(const QString &objectName)
{
return eventBrowser();
}
else if(objectName == "pipelineViewer")
{
return pipelineViewer();
}
else if(objectName == "apiInspector")
{
return apiInspector();
@@ -504,6 +546,10 @@ void CaptureContext::windowClosed(QWidget *window)
m_TextureViewer = NULL;
else if((QWidget *)m_CaptureDialog == window)
m_CaptureDialog = NULL;
else if((QWidget *)m_APIInspector == window)
m_APIInspector = NULL;
else if((QWidget *)m_PipelineViewer == window)
m_PipelineViewer = NULL;
else
qCritical() << "Unrecognised window being closed: " << window;
}
+10
View File
@@ -48,6 +48,7 @@ struct ILogViewerForm
class MainWindow;
class EventBrowser;
class APIInspector;
class PipelineStateViewer;
class TextureViewer;
class CaptureDialog;
class QProgressDialog;
@@ -129,12 +130,20 @@ public:
EventBrowser *eventBrowser();
APIInspector *apiInspector();
TextureViewer *textureViewer();
PipelineStateViewer *pipelineViewer();
CaptureDialog *captureDialog();
bool hasEventBrowser() { return m_EventBrowser != NULL; }
bool hasAPIInspector() { return m_APIInspector != NULL; }
bool hasTextureViewer() { return m_TextureViewer != NULL; }
bool hasPipelineViewer() { return m_PipelineViewer != NULL; }
bool hasCaptureDialog() { return m_CaptureDialog != NULL; }
void showEventBrowser();
void showAPIInspector();
void showTextureViewer();
void showPipelineViewer();
void showCaptureDialog();
QWidget *createToolWindow(const QString &objectName);
void windowClosed(QWidget *window);
@@ -202,5 +211,6 @@ private:
EventBrowser *m_EventBrowser = NULL;
APIInspector *m_APIInspector = NULL;
TextureViewer *m_TextureViewer = NULL;
PipelineStateViewer *m_PipelineViewer = NULL;
CaptureDialog *m_CaptureDialog = NULL;
};
+25
View File
@@ -30,6 +30,7 @@
#include <QProgressDialog>
#include "Code/CaptureContext.h"
#include "Code/QRDUtils.h"
#include "PipelineState/PipelineStateViewer.h"
#include "Resources/resource.h"
#include "Windows/Dialogs/AboutDialog.h"
#include "Windows/Dialogs/CaptureDialog.h"
@@ -147,6 +148,12 @@ MainWindow::MainWindow(CaptureContext *ctx) : QMainWindow(NULL), ui(new Ui::Main
ToolWindowManager::AreaReference(ToolWindowManager::RightOf,
ui->toolWindowManager->areaOf(eventBrowser), 0.75f));
PipelineStateViewer *pipe = m_Ctx->pipelineViewer();
ui->toolWindowManager->addToolWindow(
pipe, ToolWindowManager::AreaReference(ToolWindowManager::AddTo,
ui->toolWindowManager->areaOf(textureViewer)));
CaptureDialog *capDialog = m_Ctx->captureDialog();
ui->toolWindowManager->addToolWindow(
@@ -696,6 +703,10 @@ ToolWindowManager::AreaReference MainWindow::mainToolArea()
ui->toolWindowManager->toolWindows().contains(m_Ctx->textureViewer()))
return ToolWindowManager::AreaReference(ToolWindowManager::AddTo,
ui->toolWindowManager->areaOf(m_Ctx->textureViewer()));
else if(m_Ctx->hasPipelineViewer() &&
ui->toolWindowManager->toolWindows().contains(m_Ctx->pipelineViewer()))
return ToolWindowManager::AreaReference(ToolWindowManager::AddTo,
ui->toolWindowManager->areaOf(m_Ctx->pipelineViewer()));
else if(m_Ctx->hasCaptureDialog() &&
ui->toolWindowManager->toolWindows().contains(m_Ctx->captureDialog()))
return ToolWindowManager::AreaReference(ToolWindowManager::AddTo,
@@ -712,6 +723,10 @@ ToolWindowManager::AreaReference MainWindow::leftToolArea()
ui->toolWindowManager->toolWindows().contains(m_Ctx->textureViewer()))
return ToolWindowManager::AreaReference(ToolWindowManager::LeftOf,
ui->toolWindowManager->areaOf(m_Ctx->textureViewer()));
else if(m_Ctx->hasPipelineViewer() &&
ui->toolWindowManager->toolWindows().contains(m_Ctx->pipelineViewer()))
return ToolWindowManager::AreaReference(ToolWindowManager::LeftOf,
ui->toolWindowManager->areaOf(m_Ctx->pipelineViewer()));
else if(m_Ctx->hasCaptureDialog() &&
ui->toolWindowManager->toolWindows().contains(m_Ctx->captureDialog()))
return ToolWindowManager::AreaReference(ToolWindowManager::LeftOf,
@@ -972,6 +987,16 @@ void MainWindow::on_action_Texture_Viewer_triggered()
ui->toolWindowManager->addToolWindow(textureViewer, mainToolArea());
}
void MainWindow::on_action_Pipeline_State_triggered()
{
PipelineStateViewer *pipelineViewer = m_Ctx->pipelineViewer();
if(ui->toolWindowManager->toolWindows().contains(pipelineViewer))
ToolWindowManager::raiseToolWindow(pipelineViewer);
else
ui->toolWindowManager->addToolWindow(pipelineViewer, mainToolArea());
}
void MainWindow::on_action_Capture_Log_triggered()
{
CaptureDialog *capDialog = m_Ctx->captureDialog();
+7
View File
@@ -71,6 +71,12 @@ public:
void ShowLiveCapture(LiveCapture *live);
void LiveCaptureClosed(LiveCapture *live);
void showEventBrowser() { on_action_Event_Browser_triggered(); }
void showAPIInspector() { on_action_API_Inspector_triggered(); }
void showMeshOutput() { on_action_Mesh_Output_triggered(); }
void showTextureViewer() { on_action_Texture_Viewer_triggered(); }
void showPipelineViewer() { on_action_Pipeline_State_triggered(); }
void showCaptureDialog() { on_action_Capture_Log_triggered(); }
private slots:
// automatic slots
void on_action_Exit_triggered();
@@ -81,6 +87,7 @@ private slots:
void on_action_API_Inspector_triggered();
void on_action_Event_Browser_triggered();
void on_action_Texture_Viewer_triggered();
void on_action_Pipeline_State_triggered();
void on_action_Capture_Log_triggered();
void on_action_Inject_into_Process_triggered();
void on_action_Resolve_Symbols_triggered();
@@ -0,0 +1,49 @@
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2016 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
#include "D3D11PipelineStateViewer.h"
#include "ui_D3D11PipelineStateViewer.h"
D3D11PipelineStateViewer::D3D11PipelineStateViewer(CaptureContext *ctx, QWidget *parent)
: QFrame(parent), ui(new Ui::D3D11PipelineStateViewer), m_Ctx(ctx)
{
ui->setupUi(this);
}
D3D11PipelineStateViewer::~D3D11PipelineStateViewer()
{
delete ui;
}
void D3D11PipelineStateViewer::OnLogfileLoaded()
{
}
void D3D11PipelineStateViewer::OnLogfileClosed()
{
}
void D3D11PipelineStateViewer::OnEventSelected(uint32_t eventID)
{
}
@@ -0,0 +1,50 @@
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2016 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
#pragma once
#include <QFrame>
#include "Code/CaptureContext.h"
namespace Ui
{
class D3D11PipelineStateViewer;
}
class D3D11PipelineStateViewer : public QFrame, public ILogViewerForm
{
Q_OBJECT
public:
explicit D3D11PipelineStateViewer(CaptureContext *ctx, QWidget *parent = 0);
~D3D11PipelineStateViewer();
void OnLogfileLoaded();
void OnLogfileClosed();
void OnEventSelected(uint32_t eventID);
private:
Ui::D3D11PipelineStateViewer *ui;
CaptureContext *m_Ctx;
};
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>D3D11PipelineStateViewer</class>
<widget class="QFrame" name="D3D11PipelineStateViewer">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="font">
<font>
<pointsize>22</pointsize>
</font>
</property>
<property name="text">
<string>D3D11 - TODO</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
@@ -0,0 +1,49 @@
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2016 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
#include "D3D12PipelineStateViewer.h"
#include "ui_D3D12PipelineStateViewer.h"
D3D12PipelineStateViewer::D3D12PipelineStateViewer(CaptureContext *ctx, QWidget *parent)
: QFrame(parent), ui(new Ui::D3D12PipelineStateViewer), m_Ctx(ctx)
{
ui->setupUi(this);
}
D3D12PipelineStateViewer::~D3D12PipelineStateViewer()
{
delete ui;
}
void D3D12PipelineStateViewer::OnLogfileLoaded()
{
}
void D3D12PipelineStateViewer::OnLogfileClosed()
{
}
void D3D12PipelineStateViewer::OnEventSelected(uint32_t eventID)
{
}
@@ -0,0 +1,50 @@
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2016 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
#pragma once
#include <QFrame>
#include "Code/CaptureContext.h"
namespace Ui
{
class D3D12PipelineStateViewer;
}
class D3D12PipelineStateViewer : public QFrame, public ILogViewerForm
{
Q_OBJECT
public:
explicit D3D12PipelineStateViewer(CaptureContext *ctx, QWidget *parent = 0);
~D3D12PipelineStateViewer();
void OnLogfileLoaded();
void OnLogfileClosed();
void OnEventSelected(uint32_t eventID);
private:
Ui::D3D12PipelineStateViewer *ui;
CaptureContext *m_Ctx;
};
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>D3D12PipelineStateViewer</class>
<widget class="QFrame" name="D3D12PipelineStateViewer">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="font">
<font>
<pointsize>22</pointsize>
</font>
</property>
<property name="text">
<string>D3D12 - TODO</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
@@ -0,0 +1,49 @@
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2016 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
#include "GLPipelineStateViewer.h"
#include "ui_GLPipelineStateViewer.h"
GLPipelineStateViewer::GLPipelineStateViewer(CaptureContext *ctx, QWidget *parent)
: QFrame(parent), ui(new Ui::GLPipelineStateViewer), m_Ctx(ctx)
{
ui->setupUi(this);
}
GLPipelineStateViewer::~GLPipelineStateViewer()
{
delete ui;
}
void GLPipelineStateViewer::OnLogfileLoaded()
{
}
void GLPipelineStateViewer::OnLogfileClosed()
{
}
void GLPipelineStateViewer::OnEventSelected(uint32_t eventID)
{
}
@@ -0,0 +1,50 @@
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2016 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
#pragma once
#include <QFrame>
#include "Code/CaptureContext.h"
namespace Ui
{
class GLPipelineStateViewer;
}
class GLPipelineStateViewer : public QFrame, public ILogViewerForm
{
Q_OBJECT
public:
explicit GLPipelineStateViewer(CaptureContext *ctx, QWidget *parent = 0);
~GLPipelineStateViewer();
void OnLogfileLoaded();
void OnLogfileClosed();
void OnEventSelected(uint32_t eventID);
private:
Ui::GLPipelineStateViewer *ui;
CaptureContext *m_Ctx;
};
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>GLPipelineStateViewer</class>
<widget class="QFrame" name="GLPipelineStateViewer">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label">
<property name="font">
<font>
<pointsize>22</pointsize>
</font>
</property>
<property name="text">
<string>OpenGL - TODO</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
@@ -0,0 +1,183 @@
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2016 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
#include "PipelineStateViewer.h"
#include "D3D11PipelineStateViewer.h"
#include "D3D12PipelineStateViewer.h"
#include "GLPipelineStateViewer.h"
#include "VulkanPipelineStateViewer.h"
#include "ui_PipelineStateViewer.h"
PipelineStateViewer::PipelineStateViewer(CaptureContext *ctx, QWidget *parent)
: QFrame(parent), ui(new Ui::PipelineStateViewer), m_Ctx(ctx)
{
ui->setupUi(this);
m_D3D11 = NULL;
m_D3D12 = NULL;
m_GL = NULL;
m_Vulkan = NULL;
m_Current = NULL;
m_Ctx->AddLogViewer(this);
setToD3D11();
}
PipelineStateViewer::~PipelineStateViewer()
{
reset();
m_Ctx->windowClosed(this);
m_Ctx->RemoveLogViewer(this);
delete ui;
}
void PipelineStateViewer::OnLogfileLoaded()
{
if(m_Ctx->APIProps().pipelineType == eGraphicsAPI_D3D11)
setToD3D11();
else if(m_Ctx->APIProps().pipelineType == eGraphicsAPI_D3D12)
setToD3D12();
else if(m_Ctx->APIProps().pipelineType == eGraphicsAPI_OpenGL)
setToGL();
else if(m_Ctx->APIProps().pipelineType == eGraphicsAPI_Vulkan)
setToVulkan();
if(m_Current)
m_Current->OnLogfileLoaded();
}
void PipelineStateViewer::OnLogfileClosed()
{
if(m_Current)
m_Current->OnLogfileClosed();
}
void PipelineStateViewer::OnEventSelected(uint32_t eventID)
{
if(m_Current)
m_Current->OnEventSelected(eventID);
}
QVariant PipelineStateViewer::persistData()
{
QVariantMap state;
if(m_Current == m_D3D11)
state["type"] = "D3D11";
else if(m_Current == m_D3D12)
state["type"] = "D3D12";
else if(m_Current == m_GL)
state["type"] = "GL";
else if(m_Current == m_Vulkan)
state["type"] = "Vulkan";
else
state["type"] = "";
return state;
}
void PipelineStateViewer::setPersistData(const QVariant &persistData)
{
QString str = persistData.toMap()["type"].toString();
if(str == "D3D11")
setToD3D11();
else if(str == "D3D12")
setToD3D12();
else if(str == "GL")
setToGL();
else if(str == "Vulkan")
setToVulkan();
}
void PipelineStateViewer::reset()
{
delete m_D3D11;
delete m_D3D12;
delete m_GL;
delete m_Vulkan;
m_D3D11 = NULL;
m_D3D12 = NULL;
m_GL = NULL;
m_Vulkan = NULL;
m_Current = NULL;
}
void PipelineStateViewer::setToD3D11()
{
if(m_D3D11)
return;
reset();
m_D3D11 = new D3D11PipelineStateViewer(m_Ctx, this);
ui->layout->addWidget(m_D3D11);
m_Current = m_D3D11;
m_Ctx->CurPipelineState.DefaultType = eGraphicsAPI_D3D11;
}
void PipelineStateViewer::setToD3D12()
{
if(m_D3D12)
return;
reset();
m_D3D12 = new D3D12PipelineStateViewer(m_Ctx, this);
ui->layout->addWidget(m_D3D12);
m_Current = m_D3D12;
m_Ctx->CurPipelineState.DefaultType = eGraphicsAPI_D3D12;
}
void PipelineStateViewer::setToGL()
{
if(m_GL)
return;
reset();
m_GL = new GLPipelineStateViewer(m_Ctx, this);
ui->layout->addWidget(m_GL);
m_Current = m_GL;
m_Ctx->CurPipelineState.DefaultType = eGraphicsAPI_OpenGL;
}
void PipelineStateViewer::setToVulkan()
{
if(m_Vulkan)
return;
reset();
m_Vulkan = new VulkanPipelineStateViewer(m_Ctx, this);
ui->layout->addWidget(m_Vulkan);
m_Current = m_Vulkan;
m_Ctx->CurPipelineState.DefaultType = eGraphicsAPI_Vulkan;
}
@@ -0,0 +1,72 @@
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2016 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
#pragma once
#include <QFrame>
#include "Code/CaptureContext.h"
namespace Ui
{
class PipelineStateViewer;
}
class D3D11PipelineStateViewer;
class D3D12PipelineStateViewer;
class GLPipelineStateViewer;
class VulkanPipelineStateViewer;
class PipelineStateViewer : public QFrame, public ILogViewerForm
{
Q_OBJECT
Q_PROPERTY(QVariant persistData READ persistData WRITE setPersistData DESIGNABLE false SCRIPTABLE false)
public:
explicit PipelineStateViewer(CaptureContext *ctx, QWidget *parent = 0);
~PipelineStateViewer();
void OnLogfileLoaded();
void OnLogfileClosed();
void OnEventSelected(uint32_t eventID);
QVariant persistData();
void setPersistData(const QVariant &persistData);
private:
Ui::PipelineStateViewer *ui;
CaptureContext *m_Ctx;
void setToD3D11();
void setToD3D12();
void setToGL();
void setToVulkan();
void reset();
D3D11PipelineStateViewer *m_D3D11;
D3D12PipelineStateViewer *m_D3D12;
GLPipelineStateViewer *m_GL;
VulkanPipelineStateViewer *m_Vulkan;
ILogViewerForm *m_Current;
};
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>PipelineStateViewer</class>
<widget class="QFrame" name="PipelineStateViewer">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Pipeline State</string>
</property>
<layout class="QHBoxLayout" name="layout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
</layout>
</widget>
<resources/>
<connections/>
</ui>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,120 @@
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2016 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
#pragma once
#include <QFrame>
#include "Code/CaptureContext.h"
namespace Ui
{
class VulkanPipelineStateViewer;
}
class RDTreeWidget;
class QTreeWidgetItem;
struct SamplerData
{
SamplerData() : node(NULL) {}
QList<QTreeWidgetItem *> images;
QTreeWidgetItem *node;
};
class VulkanPipelineStateViewer : public QFrame, public ILogViewerForm
{
Q_OBJECT
public:
explicit VulkanPipelineStateViewer(CaptureContext *ctx, QWidget *parent = 0);
~VulkanPipelineStateViewer();
void OnLogfileLoaded();
void OnLogfileClosed();
void OnEventSelected(uint32_t eventID);
private slots:
// automatic slots
void on_showDisabled_toggled(bool checked);
void on_showEmpty_toggled(bool checked);
void on_exportHTML_clicked();
void on_meshView_clicked();
void on_viAttrs_itemActivated(QTreeWidgetItem *item, int column);
void on_viBuffers_itemActivated(QTreeWidgetItem *item, int column);
void on_viAttrs_mouseMove(QMouseEvent *event);
void on_viBuffers_mouseMove(QMouseEvent *event);
// manual slots
void shaderView_clicked();
void shaderEdit_clicked();
void shaderSave_clicked();
void resource_itemActivated(QTreeWidgetItem *item, int column);
void vertex_leave(QEvent *e);
private:
Ui::VulkanPipelineStateViewer *ui;
CaptureContext *m_Ctx;
QVariantList makeSampler(
const QString &bindset, const QString &slotname,
const VulkanPipelineState::Pipeline::DescriptorSet::DescriptorBinding::BindingElement &descriptor);
void addResourceRow(ShaderReflection *shaderDetails, const VulkanPipelineState::ShaderStage &stage,
int bindset, int bind, const VulkanPipelineState::Pipeline &pipe,
RDTreeWidget *resources, QMap<ResourceId, SamplerData> &samplers);
void addConstantBlockRow(ShaderReflection *shaderDetails,
const VulkanPipelineState::ShaderStage &stage, int bindset, int bind,
const VulkanPipelineState::Pipeline &pipe, RDTreeWidget *ubos);
void setShaderState(const VulkanPipelineState::ShaderStage &stage,
const VulkanPipelineState::Pipeline &pipe, QLabel *shader, RDTreeWidget *res,
RDTreeWidget *ubo);
void clearShaderState(QLabel *shader, RDTreeWidget *res, RDTreeWidget *ubo);
void setState();
void clearState();
void setInactiveRow(QTreeWidgetItem *node);
void setEmptyRow(QTreeWidgetItem *node);
void highlightIABind(int slot);
QString formatMembers(int indent, const QString &nameprefix,
const rdctype::array<ShaderConstant> &vars);
const VulkanPipelineState::ShaderStage *stageForSender(QWidget *widget);
template <typename viewType>
void setViewDetails(QTreeWidgetItem *node, const viewType &view, FetchTexture *tex);
template <typename viewType>
void setViewDetails(QTreeWidgetItem *node, const viewType &view, FetchBuffer *buf);
QTreeWidgetItem *makeNode(const std::initializer_list<QVariant> &values);
QTreeWidgetItem *makeNode(const QVariantList &values);
bool showNode(bool usedSlot, bool filledSlot);
// keep track of the VB nodes (we want to be able to highlight them easily on hover)
QList<QTreeWidgetItem *> m_VBNodes;
QList<QTreeWidgetItem *> m_BindNodes;
// from an combined image to its sampler (since we de-duplicate)
QMap<QTreeWidgetItem *, QTreeWidgetItem *> m_CombinedImageSamplers;
};
File diff suppressed because it is too large Load Diff
+16 -1
View File
@@ -112,6 +112,11 @@ SOURCES += 3rdparty/toolwindowmanager/ToolWindowManager.cpp \
Windows/Dialogs/LiveCapture.cpp \
Widgets/Extended/RDListWidget.cpp \
Windows/APIInspector.cpp \
Windows/PipelineState/PipelineStateViewer.cpp \
Windows/PipelineState/VulkanPipelineStateViewer.cpp \
Windows/PipelineState/D3D11PipelineStateViewer.cpp \
Windows/PipelineState/D3D12PipelineStateViewer.cpp \
Windows/PipelineState/GLPipelineStateViewer.cpp \
Widgets/Extended/RDTreeWidget.cpp
HEADERS += 3rdparty/toolwindowmanager/ToolWindowManager.h \
@@ -142,6 +147,11 @@ HEADERS += 3rdparty/toolwindowmanager/ToolWindowManager.h \
Windows/Dialogs/LiveCapture.h \
Widgets/Extended/RDListWidget.h \
Windows/APIInspector.h \
Windows/PipelineState/PipelineStateViewer.h \
Windows/PipelineState/VulkanPipelineStateViewer.h \
Windows/PipelineState/D3D11PipelineStateViewer.h \
Windows/PipelineState/D3D12PipelineStateViewer.h \
Windows/PipelineState/GLPipelineStateViewer.h \
Widgets/Extended/RDTreeWidget.h
FORMS += Windows/Dialogs/AboutDialog.ui \
@@ -153,7 +163,12 @@ FORMS += Windows/Dialogs/AboutDialog.ui \
Windows/Dialogs/TextureSaveDialog.ui \
Windows/Dialogs/CaptureDialog.ui \
Windows/Dialogs/LiveCapture.ui \
Windows/APIInspector.ui
Windows/APIInspector.ui \
Windows/PipelineState/PipelineStateViewer.ui \
Windows/PipelineState/VulkanPipelineStateViewer.ui \
Windows/PipelineState/D3D11PipelineStateViewer.ui \
Windows/PipelineState/D3D12PipelineStateViewer.ui \
Windows/PipelineState/GLPipelineStateViewer.ui
RESOURCES += \
resources.qrc
+25
View File
@@ -288,8 +288,12 @@
<ClCompile Include="generated\moc_APIInspector.cpp" />
<ClCompile Include="generated\moc_CaptureDialog.cpp" />
<ClCompile Include="generated\moc_CustomPaintWidget.cpp" />
<ClCompile Include="generated\moc_D3D11PipelineStateViewer.cpp" />
<ClCompile Include="generated\moc_D3D12PipelineStateViewer.cpp" />
<ClCompile Include="generated\moc_EventBrowser.cpp" />
<ClCompile Include="generated\moc_GLPipelineStateViewer.cpp" />
<ClCompile Include="generated\moc_LiveCapture.cpp" />
<ClCompile Include="generated\moc_PipelineStateViewer.cpp" />
<ClCompile Include="generated\moc_QRDUtils.cpp" />
<ClCompile Include="generated\moc_RangeHistogram.cpp" />
<ClCompile Include="generated\moc_RDDoubleSpinBox.cpp" />
@@ -307,6 +311,7 @@
<ClCompile Include="generated\moc_ToolWindowManager.cpp" />
<ClCompile Include="generated\moc_ToolWindowManagerArea.cpp" />
<ClCompile Include="generated\moc_ToolWindowManagerWrapper.cpp" />
<ClCompile Include="generated\moc_VulkanPipelineStateViewer.cpp" />
<ClCompile Include="generated\qrc_resources.cpp" />
<ClCompile Include="Widgets\Extended\RDListWidget.cpp" />
<ClCompile Include="Widgets\Extended\RDTreeWidget.cpp" />
@@ -331,6 +336,11 @@
<ClCompile Include="Widgets\Extended\RDLineEdit.cpp" />
<ClCompile Include="Windows\MainWindow.cpp" />
<ClCompile Include="Code\RenderManager.cpp" />
<ClCompile Include="Windows\PipelineState\D3D11PipelineStateViewer.cpp" />
<ClCompile Include="Windows\PipelineState\D3D12PipelineStateViewer.cpp" />
<ClCompile Include="Windows\PipelineState\GLPipelineStateViewer.cpp" />
<ClCompile Include="Windows\PipelineState\PipelineStateViewer.cpp" />
<ClCompile Include="Windows\PipelineState\VulkanPipelineStateViewer.cpp" />
<ClCompile Include="Windows\TextureViewer.cpp" />
<ClCompile Include="3rdparty\toolwindowmanager\ToolWindowManager.cpp">
<WarningLevel>Level3</WarningLevel>
@@ -351,13 +361,18 @@
<ClInclude Include="generated\ui_AboutDialog.h" />
<ClInclude Include="generated\ui_APIInspector.h" />
<ClInclude Include="generated\ui_CaptureDialog.h" />
<ClInclude Include="generated\ui_D3D11PipelineStateViewer.h" />
<ClInclude Include="generated\ui_D3D12PipelineStateViewer.h" />
<ClInclude Include="generated\ui_EventBrowser.h" />
<ClInclude Include="generated\ui_GLPipelineStateViewer.h" />
<ClInclude Include="generated\ui_LiveCapture.h" />
<ClInclude Include="generated\ui_MainWindow.h" />
<ClInclude Include="generated\ui_PipelineStateViewer.h" />
<ClInclude Include="generated\ui_ResourcePreview.h" />
<ClInclude Include="generated\ui_TextureSaveDialog.h" />
<ClInclude Include="generated\ui_TextureViewer.h" />
<ClInclude Include="generated\ui_ThumbnailStrip.h" />
<ClInclude Include="generated\ui_VulkanPipelineStateViewer.h" />
<ClInclude Include="Resources\resource.h" />
<ClInclude Include="Widgets\Extended\RDListWidget.h" />
<ClInclude Include="Widgets\Extended\RDTreeWidget.h" />
@@ -380,6 +395,11 @@
<ClInclude Include="Widgets\Extended\RDLineEdit.h" />
<ClInclude Include="Windows\MainWindow.h" />
<ClInclude Include="Code\RenderManager.h" />
<ClInclude Include="Windows\PipelineState\D3D11PipelineStateViewer.h" />
<ClInclude Include="Windows\PipelineState\D3D12PipelineStateViewer.h" />
<ClInclude Include="Windows\PipelineState\GLPipelineStateViewer.h" />
<ClInclude Include="Windows\PipelineState\PipelineStateViewer.h" />
<ClInclude Include="Windows\PipelineState\VulkanPipelineStateViewer.h" />
<ClInclude Include="Windows\TextureViewer.h" />
<ClInclude Include="3rdparty\toolwindowmanager\ToolWindowManager.h" />
<ClInclude Include="3rdparty\toolwindowmanager\ToolWindowManagerArea.h" />
@@ -395,6 +415,11 @@
<None Include="Windows\Dialogs\TextureSaveDialog.ui" />
<None Include="Windows\EventBrowser.ui" />
<None Include="Windows\MainWindow.ui" />
<None Include="Windows\PipelineState\D3D11PipelineStateViewer.ui" />
<None Include="Windows\PipelineState\D3D12PipelineStateViewer.ui" />
<None Include="Windows\PipelineState\GLPipelineStateViewer.ui" />
<None Include="Windows\PipelineState\PipelineStateViewer.ui" />
<None Include="Windows\PipelineState\VulkanPipelineStateViewer.ui" />
<None Include="Windows\TextureViewer.ui" />
</ItemGroup>
<ItemGroup>
@@ -41,6 +41,9 @@
<Filter Include="Widgets\Extended">
<UniqueIdentifier>{42a491e9-4e18-4220-8de2-e07b7cde26bc}</UniqueIdentifier>
</Filter>
<Filter Include="Windows\PipelineState">
<UniqueIdentifier>{7ba076e7-3417-4e91-be51-9e7f17a19c24}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="generated\moc_EventBrowser.cpp">
@@ -199,6 +202,36 @@
<ClCompile Include="Windows\APIInspector.cpp">
<Filter>Windows</Filter>
</ClCompile>
<ClCompile Include="generated\moc_D3D11PipelineStateViewer.cpp">
<Filter>Generated Files</Filter>
</ClCompile>
<ClCompile Include="generated\moc_D3D12PipelineStateViewer.cpp">
<Filter>Generated Files</Filter>
</ClCompile>
<ClCompile Include="generated\moc_GLPipelineStateViewer.cpp">
<Filter>Generated Files</Filter>
</ClCompile>
<ClCompile Include="generated\moc_PipelineStateViewer.cpp">
<Filter>Generated Files</Filter>
</ClCompile>
<ClCompile Include="generated\moc_VulkanPipelineStateViewer.cpp">
<Filter>Generated Files</Filter>
</ClCompile>
<ClCompile Include="Windows\PipelineState\D3D11PipelineStateViewer.cpp">
<Filter>Windows\PipelineState</Filter>
</ClCompile>
<ClCompile Include="Windows\PipelineState\D3D12PipelineStateViewer.cpp">
<Filter>Windows\PipelineState</Filter>
</ClCompile>
<ClCompile Include="Windows\PipelineState\GLPipelineStateViewer.cpp">
<Filter>Windows\PipelineState</Filter>
</ClCompile>
<ClCompile Include="Windows\PipelineState\PipelineStateViewer.cpp">
<Filter>Windows\PipelineState</Filter>
</ClCompile>
<ClCompile Include="Windows\PipelineState\VulkanPipelineStateViewer.cpp">
<Filter>Windows\PipelineState</Filter>
</ClCompile>
<ClCompile Include="Widgets\Extended\RDTreeWidget.cpp">
<Filter>Widgets\Extended</Filter>
</ClCompile>
@@ -312,6 +345,36 @@
<ClInclude Include="Windows\APIInspector.h">
<Filter>Windows</Filter>
</ClInclude>
<ClInclude Include="generated\ui_D3D11PipelineStateViewer.h">
<Filter>Generated Files</Filter>
</ClInclude>
<ClInclude Include="generated\ui_D3D12PipelineStateViewer.h">
<Filter>Generated Files</Filter>
</ClInclude>
<ClInclude Include="generated\ui_GLPipelineStateViewer.h">
<Filter>Generated Files</Filter>
</ClInclude>
<ClInclude Include="generated\ui_PipelineStateViewer.h">
<Filter>Generated Files</Filter>
</ClInclude>
<ClInclude Include="generated\ui_VulkanPipelineStateViewer.h">
<Filter>Generated Files</Filter>
</ClInclude>
<ClInclude Include="Windows\PipelineState\D3D11PipelineStateViewer.h">
<Filter>Windows\PipelineState</Filter>
</ClInclude>
<ClInclude Include="Windows\PipelineState\D3D12PipelineStateViewer.h">
<Filter>Windows\PipelineState</Filter>
</ClInclude>
<ClInclude Include="Windows\PipelineState\GLPipelineStateViewer.h">
<Filter>Windows\PipelineState</Filter>
</ClInclude>
<ClInclude Include="Windows\PipelineState\PipelineStateViewer.h">
<Filter>Windows\PipelineState</Filter>
</ClInclude>
<ClInclude Include="Windows\PipelineState\VulkanPipelineStateViewer.h">
<Filter>Windows\PipelineState</Filter>
</ClInclude>
<ClInclude Include="Widgets\Extended\RDTreeWidget.h">
<Filter>Widgets\Extended</Filter>
</ClInclude>
@@ -518,6 +581,21 @@
<None Include="Windows\APIInspector.ui">
<Filter>Windows</Filter>
</None>
<None Include="Windows\PipelineState\D3D11PipelineStateViewer.ui">
<Filter>Windows\PipelineState</Filter>
</None>
<None Include="Windows\PipelineState\D3D12PipelineStateViewer.ui">
<Filter>Windows\PipelineState</Filter>
</None>
<None Include="Windows\PipelineState\GLPipelineStateViewer.ui">
<Filter>Windows\PipelineState</Filter>
</None>
<None Include="Windows\PipelineState\PipelineStateViewer.ui">
<Filter>Windows\PipelineState</Filter>
</None>
<None Include="Windows\PipelineState\VulkanPipelineStateViewer.ui">
<Filter>Windows\PipelineState</Filter>
</None>
<None Include="Resources\action_hover.png">
<Filter>Resources\Files</Filter>
</None>