mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-06 01:50:38 +00:00
Add a descriptor viewer for showing all of a heap, root sig, or set
This commit is contained in:
@@ -2410,7 +2410,7 @@ QString BufferFormatter::GetBufferFormatString(Packing::Rules pack, ResourceId s
|
||||
}
|
||||
else
|
||||
{
|
||||
const auto &desc = res.variableType;
|
||||
const ShaderConstantType &desc = res.variableType;
|
||||
|
||||
if(viewFormat.type == ResourceFormatType::Undefined)
|
||||
{
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
#include "Windows/BufferViewer.h"
|
||||
#include "Windows/CommentView.h"
|
||||
#include "Windows/DebugMessageView.h"
|
||||
#include "Windows/DescriptorViewer.h"
|
||||
#include "Windows/Dialogs/CaptureDialog.h"
|
||||
#include "Windows/Dialogs/CrashDialog.h"
|
||||
#include "Windows/Dialogs/LiveCapture.h"
|
||||
@@ -2589,6 +2590,25 @@ IShaderMessageViewer *CaptureContext::ViewShaderMessages(ShaderStageMask stages)
|
||||
return new ShaderMessageViewer(*this, stages, m_MainWindow);
|
||||
}
|
||||
|
||||
IDescriptorViewer *CaptureContext::ViewDescriptorStore(ResourceId id)
|
||||
{
|
||||
DescriptorViewer *viewer = new DescriptorViewer(*this, m_MainWindow);
|
||||
|
||||
viewer->ViewDescriptorStore(id);
|
||||
|
||||
return viewer;
|
||||
}
|
||||
|
||||
IDescriptorViewer *CaptureContext::ViewDescriptors(const rdcarray<Descriptor> &descriptors,
|
||||
const rdcarray<SamplerDescriptor> &samplerDescriptors)
|
||||
{
|
||||
DescriptorViewer *viewer = new DescriptorViewer(*this, m_MainWindow);
|
||||
|
||||
viewer->ViewDescriptors(descriptors, samplerDescriptors);
|
||||
|
||||
return viewer;
|
||||
}
|
||||
|
||||
IBufferViewer *CaptureContext::ViewBuffer(uint64_t byteOffset, uint64_t byteSize, ResourceId id,
|
||||
const rdcstr &format)
|
||||
{
|
||||
|
||||
@@ -266,6 +266,9 @@ public:
|
||||
|
||||
IShaderMessageViewer *ViewShaderMessages(ShaderStageMask stages) override;
|
||||
|
||||
IDescriptorViewer *ViewDescriptorStore(ResourceId id) override;
|
||||
IDescriptorViewer *ViewDescriptors(const rdcarray<Descriptor> &descriptors,
|
||||
const rdcarray<SamplerDescriptor> &samplerDescriptors) override;
|
||||
IBufferViewer *ViewBuffer(uint64_t byteOffset, uint64_t byteSize, ResourceId id,
|
||||
const rdcstr &format = "") override;
|
||||
IBufferViewer *ViewTextureAsBuffer(ResourceId id, const Subresource &sub,
|
||||
|
||||
@@ -2608,6 +2608,34 @@ through the execution of a given shader.
|
||||
)");
|
||||
virtual IShaderMessageViewer *ViewShaderMessages(ShaderStageMask stages) = 0;
|
||||
|
||||
DOCUMENT(R"(Show a new :class:`DescriptorViewer` window, showing the full raw contents of a
|
||||
descriptor store.
|
||||
|
||||
:param renderdoc.ResourceId id: The ID of the descriptor store to fetch data from.
|
||||
:return: The new :class:`DescriptorViewer` window opened, but not shown.
|
||||
:rtype: DescriptorViewer
|
||||
)");
|
||||
virtual IDescriptorViewer *ViewDescriptorStore(ResourceId id) = 0;
|
||||
|
||||
DOCUMENT(R"(Show a new :class:`DescriptorViewer` window, showing contents of an arbitrary list of
|
||||
descriptors.
|
||||
|
||||
The descriptor lists should be in parallel, with identical sizes. If a non-sampler descriptor is
|
||||
to be displayed, the corresponding sampler descriptor should be uninitialised and vice-versa. If
|
||||
the lists are not the same length, only indices up to the minimum of the two lengths will be used.
|
||||
|
||||
This function should not be used to view the entirety of a descriptor store - in that case the
|
||||
:func:`ViewDescriptorStore` function will be more efficient.
|
||||
|
||||
:param List[renderdoc.Descriptor] descriptors: The list of descriptors to process and show.
|
||||
:param List[renderdoc.Descriptor] samplerDescriptors: The list of sampler descriptors to process and
|
||||
show.
|
||||
:return: The new :class:`DescriptorViewer` window opened, but not shown.
|
||||
:rtype: DescriptorViewer
|
||||
)");
|
||||
virtual IDescriptorViewer *ViewDescriptors(const rdcarray<Descriptor> &descriptors,
|
||||
const rdcarray<SamplerDescriptor> &samplerDescriptors) = 0;
|
||||
|
||||
DOCUMENT(R"(Show a new :class:`BufferViewer` window, showing a read-only view of buffer data.
|
||||
|
||||
:param int byteOffset: The offset in bytes to the start of the buffer data to show.
|
||||
|
||||
@@ -1365,6 +1365,134 @@ bool RichTextViewDelegate::linkHover(QMouseEvent *e, const QFont &font, const QM
|
||||
return false;
|
||||
}
|
||||
|
||||
ButtonDelegate::ButtonDelegate(const QIcon &icon, QString text, QWidget *parent)
|
||||
: m_Icon(icon), m_Text(text), QStyledItemDelegate(parent)
|
||||
{
|
||||
}
|
||||
|
||||
void ButtonDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
|
||||
const QModelIndex &index) const
|
||||
{
|
||||
if(m_VisibleRole != -1 && index.data(m_VisibleRole) != m_VisibleValue)
|
||||
return QStyledItemDelegate::paint(painter, option, index);
|
||||
|
||||
// draw the background to get selection etc
|
||||
QApplication::style()->drawControl(QStyle::CE_ItemViewItem, &option, painter);
|
||||
|
||||
QStyleOptionButton button;
|
||||
|
||||
button.text = m_Text;
|
||||
button.icon = m_Icon;
|
||||
|
||||
if(m_EnableRole == -1 || index.data(m_EnableRole) == m_EnableValue)
|
||||
button.state = QStyle::State_Enabled;
|
||||
|
||||
if(m_ClickedIndex == index)
|
||||
button.state |= QStyle::State_Sunken;
|
||||
|
||||
QSize sz =
|
||||
QApplication::style()->sizeFromContents(QStyle::CT_PushButton, &button, option.decorationSize);
|
||||
|
||||
button.rect = getButtonRect(option.rect, sz);
|
||||
button.iconSize = option.decorationSize;
|
||||
|
||||
QApplication::style()->drawControl(QStyle::CE_PushButton, &button, painter);
|
||||
}
|
||||
|
||||
QSize ButtonDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
|
||||
{
|
||||
if(m_VisibleRole != -1 && index.data(m_VisibleRole) != m_VisibleValue)
|
||||
return QStyledItemDelegate::sizeHint(option, index);
|
||||
|
||||
QStyleOptionButton button;
|
||||
button.text = m_Text;
|
||||
button.icon = m_Icon;
|
||||
button.state = QStyle::State_Enabled;
|
||||
|
||||
return QApplication::style()->sizeFromContents(QStyle::CT_PushButton, &button,
|
||||
option.decorationSize);
|
||||
}
|
||||
|
||||
bool ButtonDelegate::editorEvent(QEvent *event, QAbstractItemModel *model,
|
||||
const QStyleOptionViewItem &option, const QModelIndex &index)
|
||||
{
|
||||
if(m_VisibleRole != -1 && index.data(m_VisibleRole) != m_VisibleValue)
|
||||
return QStyledItemDelegate::editorEvent(event, model, option, index);
|
||||
|
||||
if(event->type() == QEvent::MouseButtonPress)
|
||||
{
|
||||
QMouseEvent *e = (QMouseEvent *)event;
|
||||
|
||||
QPoint p = e->pos();
|
||||
|
||||
QSize sz = sizeHint(option, index);
|
||||
QRect rect = getButtonRect(option.rect, sz);
|
||||
|
||||
if(rect.contains(p) && (m_EnableRole == -1 || index.data(m_EnableRole) == m_EnableValue))
|
||||
{
|
||||
m_ClickedIndex = index;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if(event->type() == QEvent::MouseMove)
|
||||
{
|
||||
QMouseEvent *e = (QMouseEvent *)event;
|
||||
|
||||
if(m_ClickedIndex != index || (e->buttons() & Qt::LeftButton) == 0)
|
||||
{
|
||||
m_ClickedIndex = QModelIndex();
|
||||
}
|
||||
else
|
||||
{
|
||||
QPoint p = e->pos();
|
||||
|
||||
QSize sz = sizeHint(option, index);
|
||||
QRect rect = getButtonRect(option.rect, sz);
|
||||
|
||||
if(!rect.contains(p))
|
||||
{
|
||||
m_ClickedIndex = QModelIndex();
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(event->type() == QEvent::MouseButtonRelease)
|
||||
{
|
||||
if(m_ClickedIndex == index && index != QModelIndex())
|
||||
{
|
||||
m_ClickedIndex = QModelIndex();
|
||||
|
||||
QMouseEvent *e = (QMouseEvent *)event;
|
||||
|
||||
QPoint p = e->pos();
|
||||
|
||||
QSize sz = sizeHint(option, index);
|
||||
QRect rect = getButtonRect(option.rect, sz);
|
||||
|
||||
if(rect.contains(p))
|
||||
{
|
||||
emit messageClicked(index);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return QStyledItemDelegate::editorEvent(event, model, option, index);
|
||||
}
|
||||
|
||||
QRect ButtonDelegate::getButtonRect(const QRect boundsRect, const QSize sz) const
|
||||
{
|
||||
QRect rect = boundsRect;
|
||||
rect.setWidth(qMin(rect.width(), sz.width()));
|
||||
rect.setHeight(qMin(rect.height(), sz.height()));
|
||||
if(m_Centered)
|
||||
rect.moveLeft(rect.center().x() - rect.width() / 2);
|
||||
rect.moveTop(rect.center().y() - rect.height() / 2);
|
||||
// clip if the rounding from centering caused us to go out of bounds
|
||||
rect.setTop(qMax(rect.top(), boundsRect.top()));
|
||||
rect.setLeft(qMax(rect.left(), boundsRect.left()));
|
||||
return rect;
|
||||
}
|
||||
|
||||
#include "renderdoc_tostr.inl"
|
||||
|
||||
QString ToQStr(const ResourceUsage usage, const GraphicsAPI apitype)
|
||||
|
||||
@@ -766,6 +766,47 @@ private:
|
||||
QAbstractItemView *m_widget;
|
||||
};
|
||||
|
||||
class ButtonDelegate : public QStyledItemDelegate
|
||||
{
|
||||
private:
|
||||
Q_OBJECT
|
||||
|
||||
QModelIndex m_ClickedIndex;
|
||||
QIcon m_Icon;
|
||||
QString m_Text;
|
||||
bool m_Centered = true;
|
||||
|
||||
int m_EnableRole = -1;
|
||||
QVariant m_EnableValue;
|
||||
|
||||
int m_VisibleRole = -1;
|
||||
QVariant m_VisibleValue;
|
||||
|
||||
QRect getButtonRect(const QRect boundsRect, const QSize sz) const;
|
||||
|
||||
public:
|
||||
ButtonDelegate(const QIcon &icon, QString text, QWidget *parent);
|
||||
void paint(QPainter *painter, const QStyleOptionViewItem &option,
|
||||
const QModelIndex &index) const override;
|
||||
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override;
|
||||
bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option,
|
||||
const QModelIndex &index) override;
|
||||
|
||||
void setVisibleTrigger(int role, QVariant value)
|
||||
{
|
||||
m_VisibleRole = role;
|
||||
m_VisibleValue = value;
|
||||
}
|
||||
void setEnableTrigger(int role, QVariant value)
|
||||
{
|
||||
m_EnableRole = role;
|
||||
m_EnableValue = value;
|
||||
}
|
||||
void setCentred(bool centered) { m_Centered = centered; }
|
||||
signals:
|
||||
void messageClicked(const QModelIndex &index);
|
||||
};
|
||||
|
||||
class StructuredDataItemModel : public QAbstractItemModel
|
||||
{
|
||||
public:
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,83 @@
|
||||
/******************************************************************************
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2019-2024 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/Interface/QRDInterface.h"
|
||||
|
||||
namespace Ui
|
||||
{
|
||||
class DescriptorViewer;
|
||||
}
|
||||
|
||||
class DescriptorItemModel;
|
||||
|
||||
class DescriptorViewer : public QFrame, public IDescriptorViewer, public ICaptureViewer
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit DescriptorViewer(ICaptureContext &ctx, QWidget *parent = 0);
|
||||
~DescriptorViewer();
|
||||
|
||||
void ViewDescriptorStore(ResourceId id);
|
||||
void ViewDescriptors(const rdcarray<Descriptor> &descriptors,
|
||||
const rdcarray<SamplerDescriptor> &samplerDescriptors);
|
||||
void ViewD3D12State();
|
||||
|
||||
// IDescriptorViewer
|
||||
QWidget *Widget() override { return this; }
|
||||
// ICaptureViewer
|
||||
void OnCaptureLoaded() override;
|
||||
void OnCaptureClosed() override;
|
||||
void OnSelectedEventChanged(uint32_t eventId) override {}
|
||||
void OnEventChanged(uint32_t eventId) override;
|
||||
|
||||
private slots:
|
||||
void on_pipeButton_clicked();
|
||||
|
||||
private:
|
||||
Ui::DescriptorViewer *ui;
|
||||
ICaptureContext &m_Ctx;
|
||||
|
||||
DescriptorStoreDescription m_DescriptorStore;
|
||||
|
||||
rdcarray<Descriptor> m_Descriptors;
|
||||
rdcarray<SamplerDescriptor> m_SamplerDescriptors;
|
||||
rdcarray<DescriptorLogicalLocation> m_Locations;
|
||||
|
||||
// the descriptors array is always full (we don't worry about the overallocation for only-samplers),
|
||||
// but if we fetched these ourselves we will have fetched samplers sparsely only when necessary.
|
||||
// This array is the same size as m_Descriptors in that case containing the lookup indices in the samplers array
|
||||
rdcarray<uint32_t> m_DescriptorToSamplerLookup;
|
||||
|
||||
rdcarray<ResourceId> m_D3D12Heaps;
|
||||
D3D12Pipe::RootSignature m_D3D12RootSig;
|
||||
|
||||
// make the model a friend for simplicity
|
||||
friend class DescriptorItemModel;
|
||||
|
||||
DescriptorItemModel *m_Model;
|
||||
};
|
||||
@@ -0,0 +1,142 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>DescriptorViewer</class>
|
||||
<widget class="QFrame" name="DescriptorViewer">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>400</width>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Descriptor Viewer</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="mainLayout">
|
||||
<property name="leftMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="toolbarHorizontalLayout">
|
||||
<property name="spacing">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QToolButton" name="pipeButton">
|
||||
<property name="text">
|
||||
<string>Open Pipeline State</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../Resources/resources.qrc">
|
||||
<normaloff>:/action.png</normaloff>:/action.png</iconset>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Open the pipeline state viewer to more easily show the current bindings.</string>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonTextBesideIcon</enum>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="pipeLabel">
|
||||
<property name="text">
|
||||
<string></string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="toolbarHorizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDTreeView" name="descriptors">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="midLineWidth">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="verticalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAlwaysOn</enum>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="indentation">
|
||||
<number>12</number>
|
||||
</property>
|
||||
<property name="rootIsDecorated">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="uniformRowHeights">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="allColumnsShowFocus">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="headerHidden">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<attribute name="headerCascadingSectionResizes">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<attribute name="headerStretchLastSection">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>RDTreeView</class>
|
||||
<extends>QTreeWidget</extends>
|
||||
<header>Widgets/Extended/RDTreeView.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -31,6 +31,7 @@
|
||||
#include "Code/Resources.h"
|
||||
#include "Widgets/ComputeDebugSelector.h"
|
||||
#include "Widgets/Extended/RDHeaderView.h"
|
||||
#include "Windows/DescriptorViewer.h"
|
||||
#include "flowlayout/FlowLayout.h"
|
||||
#include "toolwindowmanager/ToolWindowManager.h"
|
||||
#include "PipelineStateViewer.h"
|
||||
@@ -114,6 +115,11 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->psRootSig, ui->csRootSig, ui->asRootSig, ui->msRootSig,
|
||||
};
|
||||
|
||||
QToolButton *sigButtons[] = {
|
||||
ui->vsRootSigButton, ui->hsRootSigButton, ui->dsRootSigButton, ui->gsRootSigButton,
|
||||
ui->psRootSigButton, ui->csRootSigButton, ui->asRootSigButton, ui->msRootSigButton,
|
||||
};
|
||||
|
||||
QToolButton *viewButtons[] = {
|
||||
ui->vsShaderViewButton, ui->hsShaderViewButton, ui->dsShaderViewButton,
|
||||
ui->gsShaderViewButton, ui->psShaderViewButton, ui->csShaderViewButton,
|
||||
@@ -172,6 +178,9 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx,
|
||||
for(QToolButton *b : viewButtons)
|
||||
QObject::connect(b, &QToolButton::clicked, this, &D3D12PipelineStateViewer::shaderView_clicked);
|
||||
|
||||
for(QToolButton *b : sigButtons)
|
||||
QObject::connect(b, &QToolButton::clicked, this, &D3D12PipelineStateViewer::rootSigView_clicked);
|
||||
|
||||
for(RDLabel *b : shaderLabels)
|
||||
{
|
||||
b->setAutoFillBackground(true);
|
||||
@@ -1086,6 +1095,14 @@ void D3D12PipelineStateViewer::clearState()
|
||||
for(QToolButton *b : shaderButtons)
|
||||
b->setEnabled(false);
|
||||
|
||||
QToolButton *sigButtons[] = {
|
||||
ui->vsRootSigButton, ui->hsRootSigButton, ui->dsRootSigButton, ui->gsRootSigButton,
|
||||
ui->psRootSigButton, ui->csRootSigButton, ui->asRootSigButton, ui->msRootSigButton,
|
||||
};
|
||||
|
||||
for(QToolButton *b : sigButtons)
|
||||
b->setEnabled(false);
|
||||
|
||||
const QPixmap &tick = Pixmaps::tick(this);
|
||||
const QPixmap &cross = Pixmaps::cross(this);
|
||||
|
||||
@@ -1883,6 +1900,14 @@ void D3D12PipelineStateViewer::setState()
|
||||
m_Common.SetupShaderEditButton(b, state.pipelineResourceId, stage->resourceId, stage->reflection);
|
||||
}
|
||||
|
||||
QToolButton *sigButtons[] = {
|
||||
ui->vsRootSigButton, ui->hsRootSigButton, ui->dsRootSigButton, ui->gsRootSigButton,
|
||||
ui->psRootSigButton, ui->csRootSigButton, ui->asRootSigButton, ui->msRootSigButton,
|
||||
};
|
||||
|
||||
for(QToolButton *b : sigButtons)
|
||||
b->setEnabled(state.rootSignature.resourceId != ResourceId());
|
||||
|
||||
bool streamoutSet = false;
|
||||
vs = ui->gsStreamOut->verticalScrollBar()->value();
|
||||
ui->gsStreamOut->beginUpdate();
|
||||
@@ -2537,6 +2562,15 @@ void D3D12PipelineStateViewer::shaderView_clicked()
|
||||
m_Ctx.AddDockWindow(shad->Widget(), DockReference::AddTo, this);
|
||||
}
|
||||
|
||||
void D3D12PipelineStateViewer::rootSigView_clicked()
|
||||
{
|
||||
DescriptorViewer *view = (DescriptorViewer *)m_Ctx.ViewDescriptors({}, {});
|
||||
|
||||
view->ViewD3D12State();
|
||||
|
||||
m_Ctx.AddDockWindow(view->Widget(), DockReference::AddTo, this);
|
||||
}
|
||||
|
||||
void D3D12PipelineStateViewer::shaderSave_clicked()
|
||||
{
|
||||
const D3D12Pipe::Shader *stage = stageForSender(qobject_cast<QWidget *>(QObject::sender()));
|
||||
|
||||
@@ -74,6 +74,7 @@ private slots:
|
||||
|
||||
// manual slots
|
||||
void shaderView_clicked();
|
||||
void rootSigView_clicked();
|
||||
void shaderSave_clicked();
|
||||
void resource_itemActivated(RDTreeWidgetItem *item, int column);
|
||||
void cbuffer_itemActivated(RDTreeWidgetItem *item, int column);
|
||||
|
||||
@@ -506,7 +506,7 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Shader</string>
|
||||
<string>Root Signature && Shader</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<property name="spacing">
|
||||
@@ -525,6 +525,29 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="vsRootSigButton">
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Open Root Signature View</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>View</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../Resources/resources.qrc">
|
||||
<normaloff>:/action.png</normaloff>:/action.png</iconset>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonTextBesideIcon</enum>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="vsShader">
|
||||
<property name="frameShape">
|
||||
@@ -912,7 +935,7 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Shader</string>
|
||||
<string>Root Signature && Shader</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_7">
|
||||
<property name="spacing">
|
||||
@@ -931,6 +954,29 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="hsRootSigButton">
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Open Root Signature View</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>View</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../Resources/resources.qrc">
|
||||
<normaloff>:/action.png</normaloff>:/action.png</iconset>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonTextBesideIcon</enum>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="hsShader">
|
||||
<property name="frameShape">
|
||||
@@ -1318,7 +1364,7 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Shader</string>
|
||||
<string>Root Signature && Shader</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_10">
|
||||
<property name="spacing">
|
||||
@@ -1337,6 +1383,29 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="dsRootSigButton">
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Open Root Signature View</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>View</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../Resources/resources.qrc">
|
||||
<normaloff>:/action.png</normaloff>:/action.png</iconset>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonTextBesideIcon</enum>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="dsShader">
|
||||
<property name="frameShape">
|
||||
@@ -1724,7 +1793,7 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Shader</string>
|
||||
<string>Root Signature && Shader</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_13">
|
||||
<property name="spacing">
|
||||
@@ -1743,6 +1812,29 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="gsRootSigButton">
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Open Root Signature View</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>View</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../Resources/resources.qrc">
|
||||
<normaloff>:/action.png</normaloff>:/action.png</iconset>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonTextBesideIcon</enum>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="gsShader">
|
||||
<property name="frameShape">
|
||||
@@ -2750,7 +2842,7 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Shader</string>
|
||||
<string>Root Signature && Shader</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_16">
|
||||
<property name="spacing">
|
||||
@@ -2769,6 +2861,29 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="psRootSigButton">
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Open Root Signature View</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>View</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../Resources/resources.qrc">
|
||||
<normaloff>:/action.png</normaloff>:/action.png</iconset>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonTextBesideIcon</enum>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="psShader">
|
||||
<property name="frameShape">
|
||||
@@ -3684,7 +3799,7 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Shader</string>
|
||||
<string>Root Signature && Shader</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_8">
|
||||
<property name="spacing">
|
||||
@@ -3715,6 +3830,29 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="csRootSigButton">
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Open Root Signature View</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>View</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../Resources/resources.qrc">
|
||||
<normaloff>:/action.png</normaloff>:/action.png</iconset>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonTextBesideIcon</enum>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="csShader">
|
||||
<property name="frameShape">
|
||||
@@ -4122,7 +4260,7 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Shader</string>
|
||||
<string>Root Signature && Shader</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="asHorizontalLayout1">
|
||||
<property name="spacing">
|
||||
@@ -4153,6 +4291,29 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="asRootSigButton">
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Open Root Signature View</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>View</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../Resources/resources.qrc">
|
||||
<normaloff>:/action.png</normaloff>:/action.png</iconset>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonTextBesideIcon</enum>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="asShader">
|
||||
<property name="frameShape">
|
||||
@@ -4543,7 +4704,7 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Shader</string>
|
||||
<string>Root Signature && Shader</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="msHorizontalLayout1">
|
||||
<property name="spacing">
|
||||
@@ -4574,6 +4735,29 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="msRootSigButton">
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Open Root Signature View</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>View</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../Resources/resources.qrc">
|
||||
<normaloff>:/action.png</normaloff>:/action.png</iconset>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonTextBesideIcon</enum>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="msShader">
|
||||
<property name="frameShape">
|
||||
|
||||
@@ -145,6 +145,11 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->tesShader, ui->gsShader, ui->fsShader, ui->csShader,
|
||||
};
|
||||
|
||||
RDLabel *pipeLayoutLabels[] = {
|
||||
ui->tsPipeLayout, ui->msPipeLayout, ui->vsPipeLayout, ui->tcsPipeLayout,
|
||||
ui->tesPipeLayout, ui->gsPipeLayout, ui->fsPipeLayout, ui->csPipeLayout,
|
||||
};
|
||||
|
||||
QToolButton *viewButtons[] = {
|
||||
ui->tsShaderViewButton, ui->msShaderViewButton, ui->vsShaderViewButton,
|
||||
ui->tcsShaderViewButton, ui->tesShaderViewButton, ui->gsShaderViewButton,
|
||||
@@ -184,6 +189,11 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->tesUBOs, ui->gsUBOs, ui->fsUBOs, ui->csUBOs,
|
||||
};
|
||||
|
||||
RDTreeWidget *descSets[] = {
|
||||
ui->tsDescSets, ui->msDescSets, ui->vsDescSets, ui->tcsDescSets,
|
||||
ui->tesDescSets, ui->gsDescSets, ui->fsDescSets, ui->csDescSets,
|
||||
};
|
||||
|
||||
// setup FlowLayout for CS shader group, with debugging controls
|
||||
{
|
||||
QLayout *oldLayout = ui->csShaderGroup->layout();
|
||||
@@ -210,8 +220,28 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx,
|
||||
b->setBackgroundRole(QPalette::ToolTipBase);
|
||||
b->setForegroundRole(QPalette::ToolTipText);
|
||||
b->setMinimumSizeHint(QSize(250, 0));
|
||||
b->setFont(Formatter::PreferredFont());
|
||||
}
|
||||
|
||||
for(RDLabel *b : pipeLayoutLabels)
|
||||
{
|
||||
b->setAutoFillBackground(true);
|
||||
b->setBackgroundRole(QPalette::ToolTipBase);
|
||||
b->setForegroundRole(QPalette::ToolTipText);
|
||||
b->setMinimumSizeHint(QSize(250, ui->vsShaderViewButton->minimumSizeHint().height()));
|
||||
b->setFont(Formatter::PreferredFont());
|
||||
}
|
||||
|
||||
// collapse the descriptor groups by default
|
||||
ui->vsDescGroup->setCollapsed(true);
|
||||
ui->tcsDescGroup->setCollapsed(true);
|
||||
ui->tesDescGroup->setCollapsed(true);
|
||||
ui->gsDescGroup->setCollapsed(true);
|
||||
ui->fsDescGroup->setCollapsed(true);
|
||||
ui->csDescGroup->setCollapsed(true);
|
||||
ui->tsDescGroup->setCollapsed(true);
|
||||
ui->msDescGroup->setCollapsed(true);
|
||||
|
||||
QObject::connect(m_ComputeDebugSelector, &ComputeDebugSelector::beginDebug, this,
|
||||
&VulkanPipelineStateViewer::computeDebugSelector_beginDebug);
|
||||
|
||||
@@ -251,6 +281,10 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx,
|
||||
QObject::connect(ubo, &RDTreeWidget::itemActivated, this,
|
||||
&VulkanPipelineStateViewer::ubo_itemActivated);
|
||||
|
||||
for(RDTreeWidget *desc : descSets)
|
||||
QObject::connect(desc, &RDTreeWidget::itemActivated, this,
|
||||
&VulkanPipelineStateViewer::descSet_itemActivated);
|
||||
|
||||
{
|
||||
QMenu *extensionsMenu = new QMenu(this);
|
||||
|
||||
@@ -328,6 +362,23 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx,
|
||||
m_Common.SetupResourceView(ubo);
|
||||
}
|
||||
|
||||
for(RDTreeWidget *desc : descSets)
|
||||
{
|
||||
RDHeaderView *header = new RDHeaderView(Qt::Horizontal, this);
|
||||
desc->setHeader(header);
|
||||
|
||||
desc->setColumns({tr("Index"), tr("Layout"), tr("Bound Set"), tr("Go")});
|
||||
header->setColumnStretchHints({-1, 4, 4, -1});
|
||||
|
||||
desc->setHoverIconColumn(3, action, action_hover);
|
||||
desc->setClearSelectionOnFocusLoss(true);
|
||||
desc->setInstantTooltips(true);
|
||||
|
||||
m_Common.SetupResourceView(desc);
|
||||
}
|
||||
|
||||
ui->vsDescGroupVLayout->activate();
|
||||
|
||||
{
|
||||
RDHeaderView *header = new RDHeaderView(Qt::Horizontal, this);
|
||||
ui->xfbBuffers->setHeader(header);
|
||||
@@ -441,28 +492,20 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx,
|
||||
|
||||
ui->viAttrs->setFont(Formatter::PreferredFont());
|
||||
ui->viBuffers->setFont(Formatter::PreferredFont());
|
||||
ui->tsShader->setFont(Formatter::PreferredFont());
|
||||
ui->tsResources->setFont(Formatter::PreferredFont());
|
||||
ui->tsUBOs->setFont(Formatter::PreferredFont());
|
||||
ui->msShader->setFont(Formatter::PreferredFont());
|
||||
ui->msResources->setFont(Formatter::PreferredFont());
|
||||
ui->msUBOs->setFont(Formatter::PreferredFont());
|
||||
ui->vsShader->setFont(Formatter::PreferredFont());
|
||||
ui->vsResources->setFont(Formatter::PreferredFont());
|
||||
ui->vsUBOs->setFont(Formatter::PreferredFont());
|
||||
ui->gsShader->setFont(Formatter::PreferredFont());
|
||||
ui->gsResources->setFont(Formatter::PreferredFont());
|
||||
ui->gsUBOs->setFont(Formatter::PreferredFont());
|
||||
ui->tcsShader->setFont(Formatter::PreferredFont());
|
||||
ui->tcsResources->setFont(Formatter::PreferredFont());
|
||||
ui->tcsUBOs->setFont(Formatter::PreferredFont());
|
||||
ui->tesShader->setFont(Formatter::PreferredFont());
|
||||
ui->tesResources->setFont(Formatter::PreferredFont());
|
||||
ui->tesUBOs->setFont(Formatter::PreferredFont());
|
||||
ui->fsShader->setFont(Formatter::PreferredFont());
|
||||
ui->fsResources->setFont(Formatter::PreferredFont());
|
||||
ui->fsUBOs->setFont(Formatter::PreferredFont());
|
||||
ui->csShader->setFont(Formatter::PreferredFont());
|
||||
ui->csResources->setFont(Formatter::PreferredFont());
|
||||
ui->csUBOs->setFont(Formatter::PreferredFont());
|
||||
ui->xfbBuffers->setFont(Formatter::PreferredFont());
|
||||
@@ -895,12 +938,15 @@ void VulkanPipelineStateViewer::setNewMeshPipeFlow()
|
||||
ui->pipeFlow->setIsolatedStage(5); // compute shader isolated
|
||||
}
|
||||
|
||||
void VulkanPipelineStateViewer::clearShaderState(RDLabel *shader, RDTreeWidget *resources,
|
||||
RDTreeWidget *cbuffers)
|
||||
void VulkanPipelineStateViewer::clearShaderState(RDLabel *shader, RDLabel *pipeLayout,
|
||||
RDTreeWidget *resources, RDTreeWidget *cbuffers,
|
||||
RDTreeWidget *descSets)
|
||||
{
|
||||
pipeLayout->setText(tr("Pipeline Layout"));
|
||||
shader->setText(QFormatStr("%1: %1").arg(ToQStr(ResourceId())));
|
||||
resources->clear();
|
||||
cbuffers->clear();
|
||||
descSets->clear();
|
||||
}
|
||||
|
||||
void VulkanPipelineStateViewer::clearState()
|
||||
@@ -917,14 +963,14 @@ void VulkanPipelineStateViewer::clearState()
|
||||
ui->primRestart->setVisible(false);
|
||||
ui->topologyDiagram->setPixmap(QPixmap());
|
||||
|
||||
clearShaderState(ui->tsShader, ui->tsResources, ui->tsUBOs);
|
||||
clearShaderState(ui->msShader, ui->msResources, ui->msUBOs);
|
||||
clearShaderState(ui->vsShader, ui->vsResources, ui->vsUBOs);
|
||||
clearShaderState(ui->tcsShader, ui->tcsResources, ui->tcsUBOs);
|
||||
clearShaderState(ui->tesShader, ui->tesResources, ui->tesUBOs);
|
||||
clearShaderState(ui->gsShader, ui->gsResources, ui->gsUBOs);
|
||||
clearShaderState(ui->fsShader, ui->fsResources, ui->fsUBOs);
|
||||
clearShaderState(ui->csShader, ui->csResources, ui->csUBOs);
|
||||
clearShaderState(ui->tsShader, ui->tsPipeLayout, ui->tsResources, ui->tsUBOs, ui->tsDescSets);
|
||||
clearShaderState(ui->msShader, ui->msPipeLayout, ui->msResources, ui->msUBOs, ui->msDescSets);
|
||||
clearShaderState(ui->vsShader, ui->vsPipeLayout, ui->vsResources, ui->vsUBOs, ui->vsDescSets);
|
||||
clearShaderState(ui->tcsShader, ui->tcsPipeLayout, ui->tcsResources, ui->tcsUBOs, ui->tcsDescSets);
|
||||
clearShaderState(ui->tesShader, ui->tesPipeLayout, ui->tesResources, ui->tesUBOs, ui->tesDescSets);
|
||||
clearShaderState(ui->gsShader, ui->gsPipeLayout, ui->gsResources, ui->gsUBOs, ui->gsDescSets);
|
||||
clearShaderState(ui->fsShader, ui->fsPipeLayout, ui->fsResources, ui->fsUBOs, ui->fsDescSets);
|
||||
clearShaderState(ui->csShader, ui->csPipeLayout, ui->csResources, ui->csUBOs, ui->csDescSets);
|
||||
|
||||
ui->xfbBuffers->clear();
|
||||
|
||||
@@ -1618,7 +1664,8 @@ void VulkanPipelineStateViewer::addConstantBlockRow(const ConstantBlock *cblock,
|
||||
}
|
||||
|
||||
void VulkanPipelineStateViewer::setShaderState(const VKPipe::Pipeline &pipe,
|
||||
const VKPipe::Shader &stage, RDLabel *shader)
|
||||
const VKPipe::Shader &stage, RDLabel *shader,
|
||||
RDLabel *pipeLayout, RDTreeWidget *descSets)
|
||||
{
|
||||
ShaderReflection *shaderDetails = stage.reflection;
|
||||
|
||||
@@ -1643,6 +1690,31 @@ void VulkanPipelineStateViewer::setShaderState(const VKPipe::Pipeline &pipe,
|
||||
shText += tr(" (Subgroup size %1)").arg(stage.requiredSubgroupSize);
|
||||
|
||||
shader->setText(shText);
|
||||
|
||||
if(pipe.pipelineComputeLayoutResourceId != ResourceId())
|
||||
{
|
||||
pipeLayout->setText(tr("Pipeline Layout: %1").arg(ToQStr(pipe.pipelineComputeLayoutResourceId)));
|
||||
}
|
||||
else if(pipe.pipelinePreRastLayoutResourceId == pipe.pipelineFragmentLayoutResourceId)
|
||||
{
|
||||
pipeLayout->setText(tr("Pipeline Layout: %1").arg(ToQStr(pipe.pipelineFragmentLayoutResourceId)));
|
||||
}
|
||||
else
|
||||
{
|
||||
pipeLayout->setText(tr("Pipeline Layouts: %1 and %2")
|
||||
.arg(ToQStr(pipe.pipelinePreRastLayoutResourceId))
|
||||
.arg(ToQStr(pipe.pipelineFragmentLayoutResourceId)));
|
||||
}
|
||||
|
||||
descSets->clear();
|
||||
for(uint32_t i = 0; i < pipe.descriptorSets.size(); i++)
|
||||
{
|
||||
RDTreeWidgetItem *item =
|
||||
new RDTreeWidgetItem({i, pipe.descriptorSets[i].layoutResourceId,
|
||||
pipe.descriptorSets[i].descriptorSetResourceId, QString()});
|
||||
item->setTag(i);
|
||||
descSets->addTopLevelItem(item);
|
||||
}
|
||||
}
|
||||
|
||||
void VulkanPipelineStateViewer::setState()
|
||||
@@ -1727,8 +1799,8 @@ void VulkanPipelineStateViewer::setState()
|
||||
|
||||
if(m_MeshPipe)
|
||||
{
|
||||
setShaderState(state.graphics, state.taskShader, ui->tsShader);
|
||||
setShaderState(state.graphics, state.meshShader, ui->msShader);
|
||||
setShaderState(state.graphics, state.taskShader, ui->tsShader, ui->tsPipeLayout, ui->tsDescSets);
|
||||
setShaderState(state.graphics, state.meshShader, ui->msShader, ui->msPipeLayout, ui->msDescSets);
|
||||
|
||||
if(state.meshShader.reflection)
|
||||
ui->msTopology->setText(ToQStr(state.meshShader.reflection->outputTopology));
|
||||
@@ -1998,14 +2070,19 @@ void VulkanPipelineStateViewer::setState()
|
||||
ui->viBuffers->endUpdate();
|
||||
ui->viBuffers->verticalScrollBar()->setValue(vs);
|
||||
|
||||
setShaderState(state.graphics, state.vertexShader, ui->vsShader);
|
||||
setShaderState(state.graphics, state.geometryShader, ui->gsShader);
|
||||
setShaderState(state.graphics, state.tessControlShader, ui->tcsShader);
|
||||
setShaderState(state.graphics, state.tessEvalShader, ui->tesShader);
|
||||
setShaderState(state.graphics, state.vertexShader, ui->vsShader, ui->vsPipeLayout,
|
||||
ui->vsDescSets);
|
||||
setShaderState(state.graphics, state.geometryShader, ui->gsShader, ui->gsPipeLayout,
|
||||
ui->gsDescSets);
|
||||
setShaderState(state.graphics, state.tessControlShader, ui->tcsShader, ui->tcsPipeLayout,
|
||||
ui->tcsDescSets);
|
||||
setShaderState(state.graphics, state.tessEvalShader, ui->tesShader, ui->tesPipeLayout,
|
||||
ui->tesDescSets);
|
||||
}
|
||||
|
||||
setShaderState(state.graphics, state.fragmentShader, ui->fsShader);
|
||||
setShaderState(state.compute, state.computeShader, ui->csShader);
|
||||
setShaderState(state.graphics, state.fragmentShader, ui->fsShader, ui->fsPipeLayout,
|
||||
ui->fsDescSets);
|
||||
setShaderState(state.compute, state.computeShader, ui->csShader, ui->csPipeLayout, ui->csDescSets);
|
||||
|
||||
// fill in descriptor access
|
||||
{
|
||||
@@ -3016,6 +3093,27 @@ void VulkanPipelineStateViewer::ubo_itemActivated(RDTreeWidgetItem *item, int co
|
||||
m_Ctx.AddDockWindow(prev->Widget(), DockReference::TransientPopupArea, this, 0.3f);
|
||||
}
|
||||
|
||||
void VulkanPipelineStateViewer::descSet_itemActivated(RDTreeWidgetItem *item, int column)
|
||||
{
|
||||
const VKPipe::Shader *stage = stageForSender(item->treeWidget());
|
||||
|
||||
if(stage == NULL)
|
||||
return;
|
||||
|
||||
int index = item->tag().toInt();
|
||||
|
||||
const rdcarray<VKPipe::DescriptorSet> &descSets =
|
||||
stage->stage == ShaderStage::Compute ? m_Ctx.CurVulkanPipelineState()->compute.descriptorSets
|
||||
: m_Ctx.CurVulkanPipelineState()->graphics.descriptorSets;
|
||||
|
||||
if(index < descSets.count())
|
||||
{
|
||||
IDescriptorViewer *viewer = m_Ctx.ViewDescriptorStore(descSets[index].descriptorSetResourceId);
|
||||
|
||||
m_Ctx.AddDockWindow(viewer->Widget(), DockReference::AddTo, this);
|
||||
}
|
||||
}
|
||||
|
||||
void VulkanPipelineStateViewer::on_viAttrs_itemActivated(RDTreeWidgetItem *item, int column)
|
||||
{
|
||||
on_meshView_clicked();
|
||||
|
||||
@@ -86,6 +86,7 @@ private slots:
|
||||
void resource_itemActivated(RDTreeWidgetItem *item, int column);
|
||||
void resource_hoverItemChanged(RDTreeWidgetItem *hover);
|
||||
void ubo_itemActivated(RDTreeWidgetItem *item, int column);
|
||||
void descSet_itemActivated(RDTreeWidgetItem *item, int column);
|
||||
void vertex_leave(QEvent *e);
|
||||
|
||||
void on_computeDebugSelector_clicked();
|
||||
@@ -111,8 +112,10 @@ private:
|
||||
void addConstantBlockRow(const ConstantBlock *cblock, const UsedDescriptor &used,
|
||||
uint32_t dynamicOffset, RDTreeWidget *ubos);
|
||||
|
||||
void setShaderState(const VKPipe::Pipeline &pipe, const VKPipe::Shader &stage, RDLabel *shader);
|
||||
void clearShaderState(RDLabel *shader, RDTreeWidget *res, RDTreeWidget *ubo);
|
||||
void setShaderState(const VKPipe::Pipeline &pipe, const VKPipe::Shader &stage, RDLabel *shader,
|
||||
RDLabel *pipeLayout, RDTreeWidget *descSets);
|
||||
void clearShaderState(RDLabel *shader, RDLabel *pipeLayout, RDTreeWidget *resources,
|
||||
RDTreeWidget *cbuffers, RDTreeWidget *descSets);
|
||||
void setState();
|
||||
void clearState();
|
||||
|
||||
|
||||
@@ -633,6 +633,83 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="CollapseGroupBox" name="vsDescGroup">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Descriptor Sets</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="vsDescGroupVLayout">
|
||||
<property name="leftMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="vsPipeLayout">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDTreeWidget" name="vsDescSets">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>1</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="showDropIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="rootIsDecorated">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="uniformRowHeights">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="allColumnsShowFocus">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<attribute name="headerStretchLastSection">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QScrollArea" name="vsScroll">
|
||||
<property name="frameShape">
|
||||
@@ -945,6 +1022,83 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="CollapseGroupBox" name="tcsDescGroup">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Descriptor Sets</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="tcsDescGroupVLayout">
|
||||
<property name="leftMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="tcsPipeLayout">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDTreeWidget" name="tcsDescSets">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>1</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="showDropIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="rootIsDecorated">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="uniformRowHeights">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="allColumnsShowFocus">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<attribute name="headerStretchLastSection">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QScrollArea" name="tcsScroll">
|
||||
<property name="frameShape">
|
||||
@@ -1257,6 +1411,83 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="CollapseGroupBox" name="tesDescGroup">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Descriptor Sets</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="tesDescGroupVLayout">
|
||||
<property name="leftMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="tesPipeLayout">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDTreeWidget" name="tesDescSets">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>1</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="showDropIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="rootIsDecorated">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="uniformRowHeights">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="allColumnsShowFocus">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<attribute name="headerStretchLastSection">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QScrollArea" name="tesScroll">
|
||||
<property name="frameShape">
|
||||
@@ -1569,6 +1800,83 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="CollapseGroupBox" name="gsDescGroup">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Descriptor Sets</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="gsDescGroupVLayout">
|
||||
<property name="leftMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="gsPipeLayout">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDTreeWidget" name="gsDescSets">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>1</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="showDropIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="rootIsDecorated">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="uniformRowHeights">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="allColumnsShowFocus">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<attribute name="headerStretchLastSection">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QScrollArea" name="gsScroll">
|
||||
<property name="frameShape">
|
||||
@@ -3004,6 +3312,83 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="CollapseGroupBox" name="fsDescGroup">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Descriptor Sets</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="fsDescGroupVLayout">
|
||||
<property name="leftMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="fsPipeLayout">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDTreeWidget" name="fsDescSets">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>1</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="showDropIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="rootIsDecorated">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="uniformRowHeights">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="allColumnsShowFocus">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<attribute name="headerStretchLastSection">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QScrollArea" name="fsScroll">
|
||||
<property name="frameShape">
|
||||
@@ -3895,6 +4280,83 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="CollapseGroupBox" name="csDescGroup">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Descriptor Sets</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="csDescGroupVLayout">
|
||||
<property name="leftMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="csPipeLayout">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDTreeWidget" name="csDescSets">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>1</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="showDropIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="rootIsDecorated">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="uniformRowHeights">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="allColumnsShowFocus">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<attribute name="headerStretchLastSection">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="csConditionalRenderingGroup">
|
||||
<property name="title">
|
||||
@@ -4282,6 +4744,83 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="CollapseGroupBox" name="tsDescGroup">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Descriptor Sets</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="tsDescGroupVLayout">
|
||||
<property name="leftMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="tsPipeLayout">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDTreeWidget" name="tsDescSets">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>1</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="showDropIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="rootIsDecorated">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="uniformRowHeights">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="allColumnsShowFocus">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<attribute name="headerStretchLastSection">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QScrollArea" name="tsScroll">
|
||||
<property name="frameShape">
|
||||
@@ -4628,6 +5167,83 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="CollapseGroupBox" name="msDescGroup">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Descriptor Sets</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="msDescGroupVLayout">
|
||||
<property name="leftMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="msPipeLayout">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDTreeWidget" name="msDescSets">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>1</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="showDropIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="rootIsDecorated">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="uniformRowHeights">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="allColumnsShowFocus">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<attribute name="headerStretchLastSection">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QScrollArea" name="msScroll">
|
||||
<property name="frameShape">
|
||||
|
||||
@@ -835,6 +835,17 @@ struct CaptureContextInvoker : ObjectForwarder<ICaptureContext>
|
||||
return InvokeRetFunction<IShaderMessageViewer *>(&ICaptureContext::ViewShaderMessages, stages);
|
||||
}
|
||||
|
||||
virtual IDescriptorViewer *ViewDescriptorStore(ResourceId id) override
|
||||
{
|
||||
return InvokeRetFunction<IDescriptorViewer *>(&ICaptureContext::ViewDescriptorStore, id);
|
||||
}
|
||||
virtual IDescriptorViewer *ViewDescriptors(const rdcarray<Descriptor> &descriptors,
|
||||
const rdcarray<SamplerDescriptor> &samplerDescriptors) override
|
||||
{
|
||||
return InvokeRetFunction<IDescriptorViewer *>(&ICaptureContext::ViewDescriptors, descriptors,
|
||||
samplerDescriptors);
|
||||
}
|
||||
|
||||
virtual IBufferViewer *ViewBuffer(uint64_t byteOffset, uint64_t byteSize, ResourceId id,
|
||||
const rdcstr &format = "") override
|
||||
{
|
||||
|
||||
@@ -262,7 +262,8 @@ void ResourceInspector::Inspect(ResourceId id)
|
||||
|
||||
m_Resource = id;
|
||||
|
||||
ui->viewContents->setVisible(m_Ctx.GetTexture(id) || m_Ctx.GetBuffer(id));
|
||||
ui->viewContents->setVisible(m_Ctx.GetTexture(id) || m_Ctx.GetBuffer(id) ||
|
||||
m_Ctx.GetDescriptorStore(id));
|
||||
|
||||
m_Entries.clear();
|
||||
|
||||
@@ -568,6 +569,7 @@ void ResourceInspector::on_viewContents_clicked()
|
||||
{
|
||||
TextureDescription *tex = m_Ctx.GetTexture(m_Resource);
|
||||
BufferDescription *buf = m_Ctx.GetBuffer(m_Resource);
|
||||
DescriptorStoreDescription *desc = m_Ctx.GetDescriptorStore(m_Resource);
|
||||
|
||||
if(tex)
|
||||
{
|
||||
@@ -592,6 +594,12 @@ void ResourceInspector::on_viewContents_clicked()
|
||||
|
||||
m_Ctx.AddDockWindow(viewer->Widget(), DockReference::AddTo, this);
|
||||
}
|
||||
else if(desc)
|
||||
{
|
||||
IDescriptorViewer *viewer = m_Ctx.ViewDescriptorStore(desc->resourceId);
|
||||
|
||||
m_Ctx.AddDockWindow(viewer->Widget(), DockReference::AddTo, this);
|
||||
}
|
||||
else if(!m_Entries.isEmpty())
|
||||
{
|
||||
ShaderEntryPoint entry = m_Entries[0];
|
||||
|
||||
@@ -37,102 +37,6 @@
|
||||
static const int debuggableRole = Qt::UserRole + 1;
|
||||
static const int gotoableRole = Qt::UserRole + 2;
|
||||
|
||||
ButtonDelegate::ButtonDelegate(const QIcon &icon, int enableRole, QWidget *parent)
|
||||
: m_Icon(icon), m_EnableRole(enableRole), QStyledItemDelegate(parent)
|
||||
{
|
||||
}
|
||||
|
||||
void ButtonDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
|
||||
const QModelIndex &index) const
|
||||
{
|
||||
// draw the background to get selection etc
|
||||
QApplication::style()->drawControl(QStyle::CE_ItemViewItem, &option, painter);
|
||||
|
||||
QStyleOptionButton button;
|
||||
|
||||
QSize sz = sizeHint(option, index);
|
||||
button.rect = option.rect;
|
||||
button.rect.setLeft(button.rect.center().x() - sz.width() / 2);
|
||||
button.rect.setTop(button.rect.center().y() - sz.height() / 2);
|
||||
button.rect.setSize(sz);
|
||||
button.icon = m_Icon;
|
||||
button.iconSize = sz;
|
||||
|
||||
if(m_EnableRole == 0 || index.data(m_EnableRole).toBool())
|
||||
button.state = QStyle::State_Enabled;
|
||||
|
||||
if(m_ClickedIndex == index)
|
||||
button.state |= QStyle::State_Sunken;
|
||||
|
||||
QApplication::style()->drawControl(QStyle::CE_PushButton, &button, painter);
|
||||
}
|
||||
|
||||
QSize ButtonDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
|
||||
{
|
||||
QStyleOptionButton button;
|
||||
button.icon = m_Icon;
|
||||
button.state = QStyle::State_Enabled;
|
||||
|
||||
return QApplication::style()->sizeFromContents(QStyle::CT_PushButton, &button,
|
||||
option.decorationSize);
|
||||
}
|
||||
|
||||
bool ButtonDelegate::editorEvent(QEvent *event, QAbstractItemModel *model,
|
||||
const QStyleOptionViewItem &option, const QModelIndex &index)
|
||||
{
|
||||
if(event->type() == QEvent::MouseButtonPress)
|
||||
{
|
||||
if(m_EnableRole == 0 || index.data(m_EnableRole).toBool())
|
||||
m_ClickedIndex = index;
|
||||
}
|
||||
else if(event->type() == QEvent::MouseMove)
|
||||
{
|
||||
QMouseEvent *e = (QMouseEvent *)event;
|
||||
|
||||
if(m_ClickedIndex != index || (e->buttons() & Qt::LeftButton) == 0)
|
||||
{
|
||||
m_ClickedIndex = QModelIndex();
|
||||
}
|
||||
else
|
||||
{
|
||||
QPoint p = e->pos();
|
||||
|
||||
QSize sz = option.decorationSize;
|
||||
QRect rect = option.rect;
|
||||
rect.setLeft(rect.center().x() - sz.width() / 2);
|
||||
rect.setTop(rect.center().y() - sz.height() / 2);
|
||||
rect.setSize(sz);
|
||||
|
||||
if(!rect.contains(p))
|
||||
{
|
||||
m_ClickedIndex = QModelIndex();
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(event->type() == QEvent::MouseButtonRelease)
|
||||
{
|
||||
if(m_ClickedIndex == index && index != QModelIndex())
|
||||
{
|
||||
m_ClickedIndex = QModelIndex();
|
||||
|
||||
QMouseEvent *e = (QMouseEvent *)event;
|
||||
|
||||
QPoint p = e->pos();
|
||||
|
||||
QSize sz = option.decorationSize;
|
||||
QRect rect = option.rect;
|
||||
rect.setLeft(rect.center().x() - sz.width() / 2);
|
||||
rect.setTop(rect.center().y() - sz.height() / 2);
|
||||
rect.setSize(sz);
|
||||
|
||||
if(rect.contains(p))
|
||||
emit messageClicked(index);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
ShaderMessageViewer::ShaderMessageViewer(ICaptureContext &ctx, ShaderStageMask stages, QWidget *parent)
|
||||
: QFrame(parent), ui(new Ui::ShaderMessageViewer), m_Ctx(ctx)
|
||||
{
|
||||
@@ -211,7 +115,8 @@ ShaderMessageViewer::ShaderMessageViewer(ICaptureContext &ctx, ShaderStageMask s
|
||||
|
||||
int sortColumn = 0;
|
||||
|
||||
m_debugDelegate = new ButtonDelegate(Icons::wrench(), debuggableRole, this);
|
||||
m_debugDelegate = new ButtonDelegate(Icons::wrench(), QString(), this);
|
||||
m_debugDelegate->setEnableTrigger(debuggableRole, true);
|
||||
|
||||
if(m_Action && (m_Action->flags & ActionFlags::Dispatch))
|
||||
{
|
||||
@@ -248,7 +153,8 @@ ShaderMessageViewer::ShaderMessageViewer(ICaptureContext &ctx, ShaderStageMask s
|
||||
m_LayoutStage = ShaderStage::Vertex;
|
||||
}
|
||||
|
||||
m_gotoDelegate = new ButtonDelegate(Icons::find(), gotoableRole, this);
|
||||
m_gotoDelegate = new ButtonDelegate(Icons::find(), QString(), this);
|
||||
m_gotoDelegate->setEnableTrigger(gotoableRole, true);
|
||||
|
||||
ui->messages->setItemDelegateForColumn(0, m_debugDelegate);
|
||||
ui->messages->setItemDelegateForColumn(1, m_gotoDelegate);
|
||||
|
||||
@@ -28,31 +28,13 @@
|
||||
#include <QStyledItemDelegate>
|
||||
#include "Code/Interface/QRDInterface.h"
|
||||
|
||||
class ButtonDelegate;
|
||||
|
||||
namespace Ui
|
||||
{
|
||||
class ShaderMessageViewer;
|
||||
}
|
||||
|
||||
class ButtonDelegate : public QStyledItemDelegate
|
||||
{
|
||||
private:
|
||||
Q_OBJECT
|
||||
|
||||
QModelIndex m_ClickedIndex;
|
||||
QIcon m_Icon;
|
||||
int m_EnableRole;
|
||||
|
||||
public:
|
||||
ButtonDelegate(const QIcon &icon, int enableRole, QWidget *parent);
|
||||
void paint(QPainter *painter, const QStyleOptionViewItem &option,
|
||||
const QModelIndex &index) const override;
|
||||
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override;
|
||||
bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option,
|
||||
const QModelIndex &index) override;
|
||||
signals:
|
||||
void messageClicked(const QModelIndex &index);
|
||||
};
|
||||
|
||||
class ShaderMessageViewer : public QFrame, public IShaderMessageViewer, public ICaptureViewer
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
@@ -190,6 +190,7 @@ SOURCES += Code/qrenderdoc.cpp \
|
||||
Windows/TextureViewer.cpp \
|
||||
Windows/ShaderViewer.cpp \
|
||||
Windows/ShaderMessageViewer.cpp \
|
||||
Windows/DescriptorViewer.cpp \
|
||||
Widgets/Extended/RDLineEdit.cpp \
|
||||
Widgets/Extended/RDTextEdit.cpp \
|
||||
Widgets/Extended/RDLabel.cpp \
|
||||
@@ -275,6 +276,7 @@ HEADERS += Code/CaptureContext.h \
|
||||
Windows/TextureViewer.h \
|
||||
Windows/ShaderViewer.h \
|
||||
Windows/ShaderMessageViewer.h \
|
||||
Windows/DescriptorViewer.h \
|
||||
Widgets/Extended/RDLineEdit.h \
|
||||
Widgets/Extended/RDTextEdit.h \
|
||||
Widgets/Extended/RDLabel.h \
|
||||
@@ -356,6 +358,7 @@ FORMS += Windows/Dialogs/AboutDialog.ui \
|
||||
Windows/BufferViewer.ui \
|
||||
Windows/ShaderViewer.ui \
|
||||
Windows/ShaderMessageViewer.ui \
|
||||
Windows/DescriptorViewer.ui \
|
||||
Windows/DebugMessageView.ui \
|
||||
Windows/LogView.ui \
|
||||
Windows/CommentView.ui \
|
||||
|
||||
@@ -628,6 +628,7 @@
|
||||
<ClCompile Include="$(IntDir)generated\moc_DebugMessageView.cpp" />
|
||||
<ClCompile Include="$(IntDir)generated\moc_LogView.cpp" />
|
||||
<ClCompile Include="$(IntDir)generated\moc_CommentView.cpp" />
|
||||
<ClCompile Include="$(IntDir)generated\moc_DescriptorViewer.cpp" />
|
||||
<ClCompile Include="$(IntDir)generated\moc_EventBrowser.cpp" />
|
||||
<ClCompile Include="$(IntDir)generated\moc_GLPipelineStateViewer.cpp" />
|
||||
<ClCompile Include="$(IntDir)generated\moc_LiveCapture.cpp" />
|
||||
@@ -747,6 +748,7 @@
|
||||
<ClCompile Include="Windows\DebugMessageView.cpp" />
|
||||
<ClCompile Include="Windows\LogView.cpp" />
|
||||
<ClCompile Include="Windows\CommentView.cpp" />
|
||||
<ClCompile Include="Windows\DescriptorViewer.cpp" />
|
||||
<ClCompile Include="Windows\Dialogs\AboutDialog.cpp" />
|
||||
<ClCompile Include="Windows\Dialogs\CrashDialog.cpp" />
|
||||
<ClCompile Include="Windows\Dialogs\UpdateDialog.cpp" />
|
||||
@@ -968,6 +970,7 @@
|
||||
<ClInclude Include="$(IntDir)generated\ui_DebugMessageView.h" />
|
||||
<ClInclude Include="$(IntDir)generated\ui_LogView.h" />
|
||||
<ClInclude Include="$(IntDir)generated\ui_CommentView.h" />
|
||||
<ClInclude Include="$(IntDir)generated\ui_DescriptorViewer.h" />
|
||||
<ClInclude Include="$(IntDir)generated\ui_EventBrowser.h" />
|
||||
<ClInclude Include="$(IntDir)generated\ui_GLPipelineStateViewer.h" />
|
||||
<ClInclude Include="$(IntDir)generated\ui_LiveCapture.h" />
|
||||
@@ -1223,6 +1226,12 @@
|
||||
<Message>MOC %(Filename).h</Message>
|
||||
<Outputs>$(IntDir)generated\moc_%(Filename).cpp</Outputs>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="Windows\DescriptorViewer.h">
|
||||
<AdditionalInputs>%(Fullpath);$(QtBinDir)\moc.exe;%(AdditionalInputs)</AdditionalInputs>
|
||||
<Command>"$(QtBinDir)\moc.exe" -DUNICODE -DWIN32 -DWIN64 -D_WIN32 -D_WIN64 -DRENDERDOC_PLATFORM_WIN32 -DSCINTILLA_QT=1 -DSCI_LEXER=1 -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -D_MSC_VER=1900 -I"$(ProjectDir)." -I"$(SolutionDir)\renderdoc\api\replay" -I"$(QtIncludeDir)" -I"$(QtIncludeDir)\QtWidgets" -I"$(QtIncludeDir)\QtGui" -I"$(QtIncludeDir)\QtCore" "%(Fullpath)" -o "$(IntDir)generated\moc_%(Filename).cpp"</Command>
|
||||
<Message>MOC %(Filename).h</Message>
|
||||
<Outputs>$(IntDir)generated\moc_%(Filename).cpp</Outputs>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="Windows\Dialogs\AboutDialog.h">
|
||||
<AdditionalInputs>%(Fullpath);$(QtBinDir)\moc.exe;%(AdditionalInputs)</AdditionalInputs>
|
||||
<Command>"$(QtBinDir)\moc.exe" -DUNICODE -DWIN32 -DWIN64 -D_WIN32 -D_WIN64 -DRENDERDOC_PLATFORM_WIN32 -DSCINTILLA_QT=1 -DSCI_LEXER=1 -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -D_MSC_VER=1900 -I"$(ProjectDir)." -I"$(SolutionDir)\renderdoc\api\replay" -I"$(QtIncludeDir)" -I"$(QtIncludeDir)\QtWidgets" -I"$(QtIncludeDir)\QtGui" -I"$(QtIncludeDir)\QtCore" "%(Fullpath)" -o "$(IntDir)generated\moc_%(Filename).cpp"</Command>
|
||||
@@ -1518,6 +1527,12 @@
|
||||
<Message>UIC %(Filename).ui</Message>
|
||||
<Outputs>$(IntDir)generated\ui_%(Filename).h</Outputs>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="Windows\DescriptorViewer.ui">
|
||||
<AdditionalInputs>%(Fullpath);$(QtBinDir)\uic.exe;%(AdditionalInputs)</AdditionalInputs>
|
||||
<Command>"$(QtBinDir)\uic.exe" "%(Fullpath)" -o "$(IntDir)generated\ui_%(Filename).h"</Command>
|
||||
<Message>UIC %(Filename).ui</Message>
|
||||
<Outputs>$(IntDir)generated\ui_%(Filename).h</Outputs>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="Windows\Dialogs\AboutDialog.ui">
|
||||
<AdditionalInputs>%(Fullpath);$(QtBinDir)\uic.exe;%(AdditionalInputs)</AdditionalInputs>
|
||||
<Command>"$(QtBinDir)\uic.exe" "%(Fullpath)" -o "$(IntDir)generated\ui_%(Filename).h"</Command>
|
||||
|
||||
@@ -378,6 +378,9 @@
|
||||
<ClCompile Include="Windows\CommentView.cpp">
|
||||
<Filter>Windows</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Windows\DescriptorViewer.cpp">
|
||||
<Filter>Windows</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Windows\StatisticsViewer.cpp">
|
||||
<Filter>Windows</Filter>
|
||||
</ClCompile>
|
||||
@@ -432,6 +435,9 @@
|
||||
<ClCompile Include="$(IntDir)generated\moc_CommentView.cpp">
|
||||
<Filter>Generated Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(IntDir)generated\moc_DescriptorViewer.cpp">
|
||||
<Filter>Generated Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(IntDir)generated\moc_EventBrowser.cpp">
|
||||
<Filter>Generated Files</Filter>
|
||||
</ClCompile>
|
||||
@@ -992,6 +998,9 @@
|
||||
<ClInclude Include="$(IntDir)generated\ui_CommentView.h">
|
||||
<Filter>Generated Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(IntDir)generated\ui_DescriptorViewer.h">
|
||||
<Filter>Generated Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(IntDir)generated\ui_EnvironmentEditor.h">
|
||||
<Filter>Generated Files</Filter>
|
||||
</ClInclude>
|
||||
@@ -1190,6 +1199,9 @@
|
||||
<CustomBuild Include="Windows\CommentView.ui">
|
||||
<Filter>Windows</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="Windows\DescriptorViewer.ui">
|
||||
<Filter>Windows</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="Windows\EventBrowser.ui">
|
||||
<Filter>Windows</Filter>
|
||||
</CustomBuild>
|
||||
@@ -1277,6 +1289,9 @@
|
||||
<CustomBuild Include="Windows\CommentView.h">
|
||||
<Filter>Windows</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="Windows\DescriptorViewer.h">
|
||||
<Filter>Windows</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="Windows\EventBrowser.h">
|
||||
<Filter>Windows</Filter>
|
||||
</CustomBuild>
|
||||
|
||||
Reference in New Issue
Block a user