mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-29 13:20:54 +00:00
Split shader/program labels in pipeline state views up to wrap better
* If program or shader names are very long then combining them can cause problems with how wide the widgets get. Splitting each element into a label that can wrap around and be truncated individually produces better behaviour.
This commit is contained in:
@@ -174,9 +174,8 @@ rdcstr DoStringise(const PointerVal &el)
|
||||
}
|
||||
}
|
||||
|
||||
QString GetTruncatedResourceName(const ICaptureContext &ctx, ResourceId id)
|
||||
void TruncateStringFromEnd(QString &name)
|
||||
{
|
||||
QString name = ctx.GetResourceName(id);
|
||||
if(name.length() > 64)
|
||||
{
|
||||
QTextBoundaryFinder boundaries(QTextBoundaryFinder::Grapheme, name.data(), name.length());
|
||||
@@ -187,6 +186,12 @@ QString GetTruncatedResourceName(const ICaptureContext &ctx, ResourceId id)
|
||||
name.resize(pos);
|
||||
name += lit("...");
|
||||
}
|
||||
}
|
||||
|
||||
QString GetTruncatedResourceName(const ICaptureContext &ctx, ResourceId id)
|
||||
{
|
||||
QString name = ctx.GetResourceName(id);
|
||||
TruncateStringFromEnd(name);
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
@@ -1047,6 +1047,8 @@ void BringToForeground(QWidget *window);
|
||||
|
||||
bool IsDarkTheme();
|
||||
|
||||
void TruncateStringFromEnd(QString &name);
|
||||
|
||||
float getLuminance(const QColor &col);
|
||||
QColor contrastingColor(const QColor &col, const QColor &defaultCol);
|
||||
|
||||
|
||||
@@ -84,8 +84,13 @@ D3D11PipelineStateViewer::D3D11PipelineStateViewer(ICaptureContext &ctx,
|
||||
const QIcon &action_hover = Icons::action_hover();
|
||||
|
||||
RDLabel *objectLabels[] = {
|
||||
ui->vsShader, ui->hsShader, ui->dsShader, ui->gsShader,
|
||||
ui->psShader, ui->csShader, ui->iaBytecode,
|
||||
ui->iaBytecode,
|
||||
|
||||
ui->vsShader, ui->hsShader, ui->dsShader,
|
||||
ui->gsShader, ui->psShader, ui->csShader,
|
||||
|
||||
ui->vsShaderDebug, ui->hsShaderDebug, ui->dsShaderDebug,
|
||||
ui->gsShaderDebug, ui->psShaderDebug, ui->csShaderDebug,
|
||||
};
|
||||
|
||||
QToolButton *viewButtons[] = {
|
||||
@@ -123,21 +128,28 @@ D3D11PipelineStateViewer::D3D11PipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->vsClasses, ui->hsClasses, ui->dsClasses, ui->gsClasses, ui->psClasses, ui->csClasses,
|
||||
};
|
||||
|
||||
// setup FlowLayout for CS shader group, with debugging controls
|
||||
{
|
||||
QLayout *oldLayout = ui->csShaderGroup->layout();
|
||||
// setup FlowLayout for shader groups
|
||||
QWidget *shaderGroups[] = {
|
||||
ui->vsShaderGroup, ui->hsShaderGroup, ui->dsShaderGroup,
|
||||
ui->gsShaderGroup, ui->psShaderGroup, ui->csShaderGroup,
|
||||
};
|
||||
|
||||
QObjectList childs = ui->csShaderGroup->children();
|
||||
// setup FlowLayout for shader groups
|
||||
for(QWidget *shaderGroup : shaderGroups)
|
||||
{
|
||||
QLayout *oldLayout = shaderGroup->layout();
|
||||
|
||||
QObjectList childs = shaderGroup->children();
|
||||
childs.removeOne((QObject *)oldLayout);
|
||||
|
||||
delete oldLayout;
|
||||
|
||||
FlowLayout *csShaderFlow = new FlowLayout(ui->csShaderGroup, -1, 3, 3);
|
||||
FlowLayout *shaderFlow = new FlowLayout(shaderGroup, -1, 3, 3);
|
||||
|
||||
for(QObject *o : childs)
|
||||
csShaderFlow->addWidget(qobject_cast<QWidget *>(o));
|
||||
shaderFlow->addWidget(qobject_cast<QWidget *>(o));
|
||||
|
||||
ui->csShaderGroup->setLayout(csShaderFlow);
|
||||
shaderGroup->setLayout(shaderFlow);
|
||||
}
|
||||
|
||||
for(QToolButton *b : viewButtons)
|
||||
@@ -1068,9 +1080,9 @@ const D3D11Pipe::Shader *D3D11PipelineStateViewer::stageForSender(QWidget *widge
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void D3D11PipelineStateViewer::clearShaderState(RDLabel *shader, RDTreeWidget *tex,
|
||||
RDTreeWidget *samp, RDTreeWidget *cbuffer,
|
||||
RDTreeWidget *sub)
|
||||
void D3D11PipelineStateViewer::clearShaderState(RDLabel *shader, RDLabel *shaderDebug,
|
||||
RDTreeWidget *tex, RDTreeWidget *samp,
|
||||
RDTreeWidget *cbuffer, RDTreeWidget *sub)
|
||||
{
|
||||
shader->setText(ToQStr(ResourceId()));
|
||||
tex->clear();
|
||||
@@ -1090,12 +1102,18 @@ void D3D11PipelineStateViewer::clearState()
|
||||
ui->topology->setText(QString());
|
||||
ui->topologyDiagram->setPixmap(QPixmap());
|
||||
|
||||
clearShaderState(ui->vsShader, ui->vsResources, ui->vsSamplers, ui->vsCBuffers, ui->vsClasses);
|
||||
clearShaderState(ui->gsShader, ui->gsResources, ui->gsSamplers, ui->gsCBuffers, ui->gsClasses);
|
||||
clearShaderState(ui->hsShader, ui->hsResources, ui->hsSamplers, ui->hsCBuffers, ui->hsClasses);
|
||||
clearShaderState(ui->dsShader, ui->dsResources, ui->dsSamplers, ui->dsCBuffers, ui->dsClasses);
|
||||
clearShaderState(ui->psShader, ui->psResources, ui->psSamplers, ui->psCBuffers, ui->psClasses);
|
||||
clearShaderState(ui->csShader, ui->csResources, ui->csSamplers, ui->csCBuffers, ui->csClasses);
|
||||
clearShaderState(ui->vsShader, ui->vsShaderDebug, ui->vsResources, ui->vsSamplers, ui->vsCBuffers,
|
||||
ui->vsClasses);
|
||||
clearShaderState(ui->gsShader, ui->gsShaderDebug, ui->gsResources, ui->gsSamplers, ui->gsCBuffers,
|
||||
ui->gsClasses);
|
||||
clearShaderState(ui->hsShader, ui->hsShaderDebug, ui->hsResources, ui->hsSamplers, ui->hsCBuffers,
|
||||
ui->hsClasses);
|
||||
clearShaderState(ui->dsShader, ui->dsShaderDebug, ui->dsResources, ui->dsSamplers, ui->dsCBuffers,
|
||||
ui->dsClasses);
|
||||
clearShaderState(ui->psShader, ui->psShaderDebug, ui->psResources, ui->psSamplers, ui->psCBuffers,
|
||||
ui->psClasses);
|
||||
clearShaderState(ui->csShader, ui->csShaderDebug, ui->csResources, ui->csSamplers, ui->csCBuffers,
|
||||
ui->csClasses);
|
||||
|
||||
QToolButton *shaderButtons[] = {
|
||||
ui->vsShaderViewButton, ui->hsShaderViewButton, ui->dsShaderViewButton,
|
||||
@@ -1161,24 +1179,33 @@ void D3D11PipelineStateViewer::clearState()
|
||||
}
|
||||
|
||||
void D3D11PipelineStateViewer::setShaderState(const D3D11Pipe::Shader &stage, RDLabel *shader,
|
||||
RDTreeWidget *resources, RDTreeWidget *samplers,
|
||||
RDTreeWidget *cbuffers, RDTreeWidget *classes)
|
||||
RDLabel *shaderDebug, RDTreeWidget *resources,
|
||||
RDTreeWidget *samplers, RDTreeWidget *cbuffers,
|
||||
RDTreeWidget *classes)
|
||||
{
|
||||
ShaderReflection *shaderDetails = stage.reflection;
|
||||
|
||||
QString shText = ToQStr(stage.resourceId);
|
||||
shader->setText(ToQStr(stage.resourceId));
|
||||
|
||||
if(shaderDetails && !shaderDetails->debugInfo.files.empty())
|
||||
{
|
||||
const ShaderDebugInfo &dbg = shaderDetails->debugInfo;
|
||||
int entryFile = qMax(0, dbg.entryLocation.fileIndex);
|
||||
|
||||
shText += QFormatStr(": %1() - %2")
|
||||
.arg(shaderDetails->entryPoint)
|
||||
.arg(QFileInfo(dbg.files[entryFile].filename).fileName());
|
||||
}
|
||||
QString entryName = dbg.entrySourceName;
|
||||
TruncateStringFromEnd(entryName);
|
||||
|
||||
shader->setText(shText);
|
||||
QString filename = QFileInfo(dbg.files[entryFile].filename).fileName();
|
||||
TruncateStringFromEnd(filename);
|
||||
|
||||
QString shText = QFormatStr("%1() - %2").arg(entryName).arg(filename);
|
||||
shaderDebug->show();
|
||||
shaderDebug->setText(shText);
|
||||
}
|
||||
else
|
||||
{
|
||||
shaderDebug->hide();
|
||||
}
|
||||
|
||||
for(int i = 0; i < stage.classInstances.count(); i++)
|
||||
{
|
||||
@@ -1616,18 +1643,18 @@ void D3D11PipelineStateViewer::setState()
|
||||
targets[i] = true;
|
||||
}
|
||||
|
||||
setShaderState(state.vertexShader, ui->vsShader, ui->vsResources, ui->vsSamplers,
|
||||
ui->vsCBuffers, ui->vsClasses);
|
||||
setShaderState(state.geometryShader, ui->gsShader, ui->gsResources, ui->gsSamplers,
|
||||
ui->gsCBuffers, ui->gsClasses);
|
||||
setShaderState(state.hullShader, ui->hsShader, ui->hsResources, ui->hsSamplers, ui->hsCBuffers,
|
||||
ui->hsClasses);
|
||||
setShaderState(state.domainShader, ui->dsShader, ui->dsResources, ui->dsSamplers,
|
||||
ui->dsCBuffers, ui->dsClasses);
|
||||
setShaderState(state.pixelShader, ui->psShader, ui->psResources, ui->psSamplers, ui->psCBuffers,
|
||||
ui->psClasses);
|
||||
setShaderState(state.computeShader, ui->csShader, ui->csResources, ui->csSamplers,
|
||||
ui->csCBuffers, ui->csClasses);
|
||||
setShaderState(state.vertexShader, ui->vsShader, ui->vsShaderDebug, ui->vsResources,
|
||||
ui->vsSamplers, ui->vsCBuffers, ui->vsClasses);
|
||||
setShaderState(state.geometryShader, ui->gsShader, ui->gsShaderDebug, ui->gsResources,
|
||||
ui->gsSamplers, ui->gsCBuffers, ui->gsClasses);
|
||||
setShaderState(state.hullShader, ui->hsShader, ui->hsShaderDebug, ui->hsResources,
|
||||
ui->hsSamplers, ui->hsCBuffers, ui->hsClasses);
|
||||
setShaderState(state.domainShader, ui->dsShader, ui->dsShaderDebug, ui->dsResources,
|
||||
ui->dsSamplers, ui->dsCBuffers, ui->dsClasses);
|
||||
setShaderState(state.pixelShader, ui->psShader, ui->psShaderDebug, ui->psResources,
|
||||
ui->psSamplers, ui->psCBuffers, ui->psClasses);
|
||||
setShaderState(state.computeShader, ui->csShader, ui->csShaderDebug, ui->csResources,
|
||||
ui->csSamplers, ui->csCBuffers, ui->csClasses);
|
||||
|
||||
const ShaderReflection *shaderRefls[NumShaderStages];
|
||||
RDTreeWidget *resources[] = {
|
||||
|
||||
@@ -89,8 +89,9 @@ private:
|
||||
PipelineStateViewer &m_Common;
|
||||
ComputeDebugSelector *m_ComputeDebugSelector;
|
||||
|
||||
void setShaderState(const D3D11Pipe::Shader &stage, RDLabel *shader, RDTreeWidget *tex,
|
||||
RDTreeWidget *samp, RDTreeWidget *cbuffer, RDTreeWidget *classes);
|
||||
void setShaderState(const D3D11Pipe::Shader &stage, RDLabel *shader, RDLabel *shaderDebug,
|
||||
RDTreeWidget *tex, RDTreeWidget *samp, RDTreeWidget *cbuffer,
|
||||
RDTreeWidget *classes);
|
||||
|
||||
void addResourceRow(const D3D11ViewTag &view, const ShaderResource *shaderBind, bool usedSlot,
|
||||
RDTreeWidget *resources);
|
||||
@@ -99,8 +100,8 @@ private:
|
||||
void addCBufferRow(const Descriptor &b, uint32_t reg, const ConstantBlock *shaderBind,
|
||||
bool usedSlot, RDTreeWidget *cbuffers);
|
||||
|
||||
void clearShaderState(RDLabel *shader, RDTreeWidget *tex, RDTreeWidget *samp,
|
||||
RDTreeWidget *cbuffer, RDTreeWidget *classes);
|
||||
void clearShaderState(RDLabel *shader, RDLabel *shaderDebug, RDTreeWidget *tex,
|
||||
RDTreeWidget *samp, RDTreeWidget *cbuffer, RDTreeWidget *classes);
|
||||
void setState();
|
||||
void clearState();
|
||||
|
||||
|
||||
@@ -622,6 +622,25 @@
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="vsShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="vsShaderDebug">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
@@ -1012,6 +1031,25 @@
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="hsShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="hsShaderDebug">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
@@ -1399,6 +1437,25 @@
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="dsShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="dsShaderDebug">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
@@ -1786,6 +1843,25 @@
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="gsShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="gsShaderDebug">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
@@ -2844,6 +2920,25 @@
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="psShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="psShaderDebug">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
@@ -4010,6 +4105,31 @@
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="csShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="csShaderDebug">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
|
||||
@@ -106,8 +106,11 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx,
|
||||
const QIcon &action_hover = Icons::action_hover();
|
||||
|
||||
RDLabel *shaderLabels[] = {
|
||||
ui->vsShader, ui->hsShader, ui->dsShader, ui->gsShader,
|
||||
ui->psShader, ui->csShader, ui->asShader, ui->msShader,
|
||||
ui->vsPipeline, ui->hsPipeline, ui->dsPipeline, ui->gsPipeline,
|
||||
ui->psPipeline, ui->csPipeline, ui->asPipeline, ui->msPipeline,
|
||||
|
||||
ui->vsShader, ui->hsShader, ui->dsShader, ui->gsShader,
|
||||
ui->psShader, ui->csShader, ui->asShader, ui->msShader,
|
||||
};
|
||||
|
||||
RDLabel *rootsigLabels[] = {
|
||||
@@ -158,21 +161,28 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->psCBuffers, ui->csCBuffers, ui->asCBuffers, ui->msCBuffers,
|
||||
};
|
||||
|
||||
// setup FlowLayout for CS shader group, with debugging controls
|
||||
{
|
||||
QLayout *oldLayout = ui->csShaderGroup->layout();
|
||||
// setup FlowLayout for shader groups
|
||||
QWidget *shaderGroups[] = {
|
||||
ui->vsShaderGroup, ui->hsShaderGroup, ui->dsShaderGroup, ui->gsShaderGroup,
|
||||
ui->psShaderGroup, ui->csShaderGroup, ui->asShaderGroup, ui->msShaderGroup,
|
||||
};
|
||||
|
||||
QObjectList childs = ui->csShaderGroup->children();
|
||||
// setup FlowLayout for shader groups
|
||||
for(QWidget *shaderGroup : shaderGroups)
|
||||
{
|
||||
QLayout *oldLayout = shaderGroup->layout();
|
||||
|
||||
QObjectList childs = shaderGroup->children();
|
||||
childs.removeOne((QObject *)oldLayout);
|
||||
|
||||
delete oldLayout;
|
||||
|
||||
FlowLayout *csShaderFlow = new FlowLayout(ui->csShaderGroup, -1, 3, 3);
|
||||
FlowLayout *shaderFlow = new FlowLayout(shaderGroup, -1, 3, 3);
|
||||
|
||||
for(QObject *o : childs)
|
||||
csShaderFlow->addWidget(qobject_cast<QWidget *>(o));
|
||||
shaderFlow->addWidget(qobject_cast<QWidget *>(o));
|
||||
|
||||
ui->csShaderGroup->setLayout(csShaderFlow);
|
||||
shaderGroup->setLayout(shaderFlow);
|
||||
}
|
||||
|
||||
for(QToolButton *b : viewButtons)
|
||||
@@ -1030,12 +1040,14 @@ void D3D12PipelineStateViewer::setNewMeshPipeFlow()
|
||||
ui->pipeFlow->setIsolatedStage(5); // compute shader isolated
|
||||
}
|
||||
|
||||
void D3D12PipelineStateViewer::clearShaderState(RDLabel *shader, RDLabel *rootSig,
|
||||
RDTreeWidget *tex, RDTreeWidget *samp,
|
||||
RDTreeWidget *cbuffer, RDTreeWidget *sub)
|
||||
void D3D12PipelineStateViewer::clearShaderState(RDLabel *shader, RDLabel *shaderDebug,
|
||||
RDLabel *rootSig, RDTreeWidget *tex,
|
||||
RDTreeWidget *samp, RDTreeWidget *cbuffer,
|
||||
RDTreeWidget *sub)
|
||||
{
|
||||
rootSig->setText(ToQStr(ResourceId()));
|
||||
shader->setText(ToQStr(ResourceId()));
|
||||
shaderDebug->hide();
|
||||
tex->clear();
|
||||
samp->clear();
|
||||
sub->clear();
|
||||
@@ -1053,22 +1065,22 @@ void D3D12PipelineStateViewer::clearState()
|
||||
ui->primRestart->setVisible(false);
|
||||
ui->topologyDiagram->setPixmap(QPixmap());
|
||||
|
||||
clearShaderState(ui->asShader, ui->asRootSig, ui->asResources, ui->asSamplers, ui->asCBuffers,
|
||||
ui->asUAVs);
|
||||
clearShaderState(ui->msShader, ui->msRootSig, ui->msResources, ui->msSamplers, ui->msCBuffers,
|
||||
ui->msUAVs);
|
||||
clearShaderState(ui->vsShader, ui->vsRootSig, ui->vsResources, ui->vsSamplers, ui->vsCBuffers,
|
||||
ui->vsUAVs);
|
||||
clearShaderState(ui->gsShader, ui->gsRootSig, ui->gsResources, ui->gsSamplers, ui->gsCBuffers,
|
||||
ui->gsUAVs);
|
||||
clearShaderState(ui->hsShader, ui->hsRootSig, ui->hsResources, ui->hsSamplers, ui->hsCBuffers,
|
||||
ui->hsUAVs);
|
||||
clearShaderState(ui->dsShader, ui->dsRootSig, ui->dsResources, ui->dsSamplers, ui->dsCBuffers,
|
||||
ui->dsUAVs);
|
||||
clearShaderState(ui->psShader, ui->psRootSig, ui->psResources, ui->psSamplers, ui->psCBuffers,
|
||||
ui->psUAVs);
|
||||
clearShaderState(ui->csShader, ui->csRootSig, ui->csResources, ui->csSamplers, ui->csCBuffers,
|
||||
ui->csUAVs);
|
||||
clearShaderState(ui->asPipeline, ui->asShader, ui->asRootSig, ui->asResources, ui->asSamplers,
|
||||
ui->asCBuffers, ui->asUAVs);
|
||||
clearShaderState(ui->msPipeline, ui->msShader, ui->msRootSig, ui->msResources, ui->msSamplers,
|
||||
ui->msCBuffers, ui->msUAVs);
|
||||
clearShaderState(ui->vsPipeline, ui->vsShader, ui->vsRootSig, ui->vsResources, ui->vsSamplers,
|
||||
ui->vsCBuffers, ui->vsUAVs);
|
||||
clearShaderState(ui->gsPipeline, ui->gsShader, ui->gsRootSig, ui->gsResources, ui->gsSamplers,
|
||||
ui->gsCBuffers, ui->gsUAVs);
|
||||
clearShaderState(ui->hsPipeline, ui->hsShader, ui->hsRootSig, ui->hsResources, ui->hsSamplers,
|
||||
ui->hsCBuffers, ui->hsUAVs);
|
||||
clearShaderState(ui->dsPipeline, ui->dsShader, ui->dsRootSig, ui->dsResources, ui->dsSamplers,
|
||||
ui->dsCBuffers, ui->dsUAVs);
|
||||
clearShaderState(ui->psPipeline, ui->psShader, ui->psRootSig, ui->psResources, ui->psSamplers,
|
||||
ui->psCBuffers, ui->psUAVs);
|
||||
clearShaderState(ui->csPipeline, ui->csShader, ui->csRootSig, ui->csResources, ui->csSamplers,
|
||||
ui->csCBuffers, ui->csUAVs);
|
||||
|
||||
ui->gsStreamOut->clear();
|
||||
|
||||
@@ -1157,8 +1169,8 @@ void D3D12PipelineStateViewer::clearState()
|
||||
ui->computeDebugSelector->setEnabled(false);
|
||||
}
|
||||
|
||||
void D3D12PipelineStateViewer::setShaderState(const D3D12Pipe::Shader &stage, RDLabel *shader,
|
||||
RDLabel *rootSig)
|
||||
void D3D12PipelineStateViewer::setShaderState(const D3D12Pipe::Shader &stage, RDLabel *pipeline,
|
||||
RDLabel *shader, RDLabel *rootSig)
|
||||
{
|
||||
ShaderReflection *shaderDetails = stage.reflection;
|
||||
const D3D12Pipe::State &state = *m_Ctx.CurD3D12PipelineState();
|
||||
@@ -1171,17 +1183,27 @@ void D3D12PipelineStateViewer::setShaderState(const D3D12Pipe::Shader &stage, RD
|
||||
shText = tr("%1 - %2 Shader")
|
||||
.arg(ToQStr(state.pipelineResourceId))
|
||||
.arg(ToQStr(stage.stage, GraphicsAPI::D3D12));
|
||||
pipeline->setText(shText);
|
||||
|
||||
if(shaderDetails && !shaderDetails->debugInfo.files.empty())
|
||||
{
|
||||
const ShaderDebugInfo &dbg = shaderDetails->debugInfo;
|
||||
int entryFile = qMax(0, dbg.entryLocation.fileIndex);
|
||||
|
||||
shText += QFormatStr(": %1() - %2")
|
||||
.arg(shaderDetails->debugInfo.entrySourceName)
|
||||
.arg(QFileInfo(dbg.files[entryFile].filename).fileName());
|
||||
QString entryName = dbg.entrySourceName;
|
||||
TruncateStringFromEnd(entryName);
|
||||
|
||||
QString filename = QFileInfo(dbg.files[entryFile].filename).fileName();
|
||||
TruncateStringFromEnd(filename);
|
||||
|
||||
shText = QFormatStr("%1() - %2").arg(entryName).arg(filename);
|
||||
shader->show();
|
||||
shader->setText(shText);
|
||||
}
|
||||
else
|
||||
{
|
||||
shader->hide();
|
||||
}
|
||||
shader->setText(shText);
|
||||
}
|
||||
|
||||
void D3D12PipelineStateViewer::setState()
|
||||
@@ -1264,8 +1286,8 @@ void D3D12PipelineStateViewer::setState()
|
||||
|
||||
if(m_MeshPipe)
|
||||
{
|
||||
setShaderState(state.ampShader, ui->asShader, ui->asRootSig);
|
||||
setShaderState(state.meshShader, ui->msShader, ui->msRootSig);
|
||||
setShaderState(state.ampShader, ui->asPipeline, ui->asShader, ui->asRootSig);
|
||||
setShaderState(state.meshShader, ui->msPipeline, ui->msShader, ui->msRootSig);
|
||||
|
||||
if(state.meshShader.reflection)
|
||||
ui->msTopology->setText(ToQStr(state.meshShader.reflection->outputTopology));
|
||||
@@ -1557,14 +1579,14 @@ void D3D12PipelineStateViewer::setState()
|
||||
ui->iaBuffers->endUpdate();
|
||||
ui->iaBuffers->verticalScrollBar()->setValue(vs);
|
||||
|
||||
setShaderState(state.vertexShader, ui->vsShader, ui->vsRootSig);
|
||||
setShaderState(state.geometryShader, ui->gsShader, ui->gsRootSig);
|
||||
setShaderState(state.hullShader, ui->hsShader, ui->hsRootSig);
|
||||
setShaderState(state.domainShader, ui->dsShader, ui->dsRootSig);
|
||||
setShaderState(state.vertexShader, ui->vsPipeline, ui->vsShader, ui->vsRootSig);
|
||||
setShaderState(state.geometryShader, ui->gsPipeline, ui->gsShader, ui->gsRootSig);
|
||||
setShaderState(state.hullShader, ui->hsPipeline, ui->hsShader, ui->hsRootSig);
|
||||
setShaderState(state.domainShader, ui->dsPipeline, ui->dsShader, ui->dsRootSig);
|
||||
}
|
||||
|
||||
setShaderState(state.pixelShader, ui->psShader, ui->psRootSig);
|
||||
setShaderState(state.computeShader, ui->csShader, ui->csRootSig);
|
||||
setShaderState(state.pixelShader, ui->psPipeline, ui->psShader, ui->psRootSig);
|
||||
setShaderState(state.computeShader, ui->csPipeline, ui->csShader, ui->csRootSig);
|
||||
|
||||
// fill in descriptor access
|
||||
{
|
||||
|
||||
@@ -93,13 +93,14 @@ private:
|
||||
void setOldMeshPipeFlow();
|
||||
void setNewMeshPipeFlow();
|
||||
|
||||
void setShaderState(const D3D12Pipe::Shader &stage, RDLabel *shader, RDLabel *rootSig);
|
||||
void setShaderState(const D3D12Pipe::Shader &stage, RDLabel *pipeline, RDLabel *shader,
|
||||
RDLabel *rootSig);
|
||||
|
||||
void addResourceRow(const D3D12ViewTag &view, const ShaderResource *shaderInput, bool spacesUsed,
|
||||
RDTreeWidget *resources);
|
||||
|
||||
void clearShaderState(RDLabel *shader, RDLabel *rootSig, RDTreeWidget *tex, RDTreeWidget *samp,
|
||||
RDTreeWidget *cbuffer, RDTreeWidget *uavs);
|
||||
void clearShaderState(RDLabel *pipeline, RDLabel *shader, RDLabel *rootSig, RDTreeWidget *tex,
|
||||
RDTreeWidget *samp, RDTreeWidget *cbuffer, RDTreeWidget *uavs);
|
||||
void setState();
|
||||
void clearState();
|
||||
|
||||
|
||||
@@ -548,8 +548,27 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="vsPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="vsShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
@@ -977,8 +996,27 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="hsPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="hsShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
@@ -1406,8 +1444,27 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="dsPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="dsShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
@@ -1835,8 +1892,27 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="gsPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="gsShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
@@ -2884,8 +2960,27 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="psPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="psShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
@@ -3853,8 +3948,27 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="csPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="csShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
@@ -4314,8 +4428,27 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="asPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="asShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
@@ -4758,8 +4891,27 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="msPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="msShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
#include <QXmlStreamWriter>
|
||||
#include "Code/Resources.h"
|
||||
#include "Widgets/Extended/RDHeaderView.h"
|
||||
#include "flowlayout/FlowLayout.h"
|
||||
#include "toolwindowmanager/ToolWindowManager.h"
|
||||
#include "PipelineStateViewer.h"
|
||||
#include "ui_GLPipelineStateViewer.h"
|
||||
@@ -89,8 +90,16 @@ GLPipelineStateViewer::GLPipelineStateViewer(ICaptureContext &ctx, PipelineState
|
||||
const QIcon &action_hover = Icons::action_hover();
|
||||
|
||||
RDLabel *shaderLabels[] = {
|
||||
ui->vaoLabel, ui->vsShader, ui->tcsShader, ui->tesShader,
|
||||
ui->gsShader, ui->fsShader, ui->csShader,
|
||||
ui->vaoLabel,
|
||||
|
||||
ui->vsPipeline, ui->tcsPipeline, ui->tesPipeline,
|
||||
ui->gsPipeline, ui->fsPipeline, ui->csPipeline,
|
||||
|
||||
ui->vsProgram, ui->tcsProgram, ui->tesProgram,
|
||||
ui->gsProgram, ui->fsProgram, ui->csProgram,
|
||||
|
||||
ui->vsShader, ui->tcsShader, ui->tesShader,
|
||||
ui->gsShader, ui->fsShader, ui->csShader,
|
||||
};
|
||||
|
||||
QToolButton *viewButtons[] = {
|
||||
@@ -132,6 +141,29 @@ GLPipelineStateViewer::GLPipelineStateViewer(ICaptureContext &ctx, PipelineState
|
||||
ui->gsReadWrite, ui->fsReadWrite, ui->csReadWrite,
|
||||
};
|
||||
|
||||
QWidget *shaderGroups[] = {
|
||||
ui->vsShaderGroup, ui->tcsShaderGroup, ui->tesShaderGroup,
|
||||
ui->gsShaderGroup, ui->fsShaderGroup, ui->csShaderGroup,
|
||||
};
|
||||
|
||||
// setup FlowLayout for shader groups
|
||||
for(QWidget *shaderGroup : shaderGroups)
|
||||
{
|
||||
QLayout *oldLayout = shaderGroup->layout();
|
||||
|
||||
QObjectList childs = shaderGroup->children();
|
||||
childs.removeOne((QObject *)oldLayout);
|
||||
|
||||
delete oldLayout;
|
||||
|
||||
FlowLayout *shaderFlow = new FlowLayout(shaderGroup, -1, 3, 3);
|
||||
|
||||
for(QObject *o : childs)
|
||||
shaderFlow->addWidget(qobject_cast<QWidget *>(o));
|
||||
|
||||
shaderGroup->setLayout(shaderFlow);
|
||||
}
|
||||
|
||||
for(QToolButton *b : viewButtons)
|
||||
QObject::connect(b, &QToolButton::clicked, this, &GLPipelineStateViewer::shaderView_clicked);
|
||||
|
||||
@@ -140,7 +172,7 @@ GLPipelineStateViewer::GLPipelineStateViewer(ICaptureContext &ctx, PipelineState
|
||||
b->setAutoFillBackground(true);
|
||||
b->setBackgroundRole(QPalette::ToolTipBase);
|
||||
b->setForegroundRole(QPalette::ToolTipText);
|
||||
b->setMinimumSizeHint(QSize(250, 0));
|
||||
b->setMinimumSizeHint(QSize(150, 0));
|
||||
}
|
||||
|
||||
for(RDLabel *b : {ui->xfbObj, ui->readFBO, ui->drawFBO})
|
||||
@@ -1136,10 +1168,13 @@ const GLPipe::Shader *GLPipelineStateViewer::stageForSender(QWidget *widget)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void GLPipelineStateViewer::clearShaderState(RDLabel *shader, RDTreeWidget *tex, RDTreeWidget *samp,
|
||||
void GLPipelineStateViewer::clearShaderState(RDLabel *pipeline, RDLabel *program, RDLabel *shader,
|
||||
RDTreeWidget *tex, RDTreeWidget *samp,
|
||||
RDTreeWidget *ubo, RDTreeWidget *sub, RDTreeWidget *rw)
|
||||
{
|
||||
shader->setText(tr("Unbound Shader"));
|
||||
pipeline->hide();
|
||||
program->setText(ToQStr(ResourceId()));
|
||||
shader->setText(ToQStr(ResourceId()));
|
||||
tex->clear();
|
||||
samp->clear();
|
||||
sub->clear();
|
||||
@@ -1160,18 +1195,18 @@ void GLPipelineStateViewer::clearState()
|
||||
ui->primRestart->setVisible(false);
|
||||
ui->topologyDiagram->setPixmap(QPixmap());
|
||||
|
||||
clearShaderState(ui->vsShader, ui->vsTextures, ui->vsSamplers, ui->vsUBOs, ui->vsSubroutines,
|
||||
ui->vsReadWrite);
|
||||
clearShaderState(ui->gsShader, ui->gsTextures, ui->gsSamplers, ui->gsUBOs, ui->gsSubroutines,
|
||||
ui->gsReadWrite);
|
||||
clearShaderState(ui->tcsShader, ui->tcsTextures, ui->tcsSamplers, ui->tcsUBOs, ui->tcsSubroutines,
|
||||
ui->tcsReadWrite);
|
||||
clearShaderState(ui->tesShader, ui->tesTextures, ui->tesSamplers, ui->tesUBOs, ui->tesSubroutines,
|
||||
ui->tesReadWrite);
|
||||
clearShaderState(ui->fsShader, ui->fsTextures, ui->fsSamplers, ui->fsUBOs, ui->fsSubroutines,
|
||||
ui->fsReadWrite);
|
||||
clearShaderState(ui->csShader, ui->csTextures, ui->csSamplers, ui->csUBOs, ui->csSubroutines,
|
||||
ui->csReadWrite);
|
||||
clearShaderState(ui->vsPipeline, ui->vsProgram, ui->vsShader, ui->vsTextures, ui->vsSamplers,
|
||||
ui->vsUBOs, ui->vsSubroutines, ui->vsReadWrite);
|
||||
clearShaderState(ui->gsPipeline, ui->gsProgram, ui->gsShader, ui->gsTextures, ui->gsSamplers,
|
||||
ui->gsUBOs, ui->gsSubroutines, ui->gsReadWrite);
|
||||
clearShaderState(ui->tcsPipeline, ui->tcsProgram, ui->tcsShader, ui->tcsTextures, ui->tcsSamplers,
|
||||
ui->tcsUBOs, ui->tcsSubroutines, ui->tcsReadWrite);
|
||||
clearShaderState(ui->tesPipeline, ui->tesProgram, ui->tesShader, ui->tesTextures, ui->tesSamplers,
|
||||
ui->tesUBOs, ui->tesSubroutines, ui->tesReadWrite);
|
||||
clearShaderState(ui->fsPipeline, ui->fsProgram, ui->fsShader, ui->fsTextures, ui->fsSamplers,
|
||||
ui->fsUBOs, ui->fsSubroutines, ui->fsReadWrite);
|
||||
clearShaderState(ui->csPipeline, ui->csProgram, ui->csShader, ui->csTextures, ui->csSamplers,
|
||||
ui->csUBOs, ui->csSubroutines, ui->csReadWrite);
|
||||
|
||||
ui->xfbBuffers->clear();
|
||||
|
||||
@@ -1240,28 +1275,25 @@ void GLPipelineStateViewer::clearState()
|
||||
ui->stencils->clear();
|
||||
}
|
||||
|
||||
void GLPipelineStateViewer::setShaderState(const GLPipe::Shader &stage, RDLabel *shader,
|
||||
RDTreeWidget *subs)
|
||||
void GLPipelineStateViewer::setShaderState(const GLPipe::Shader &stage, RDLabel *pipeline,
|
||||
RDLabel *program, RDLabel *shader, RDTreeWidget *subs)
|
||||
{
|
||||
ShaderReflection *shaderDetails = stage.reflection;
|
||||
const GLPipe::State &state = *m_Ctx.CurGLPipelineState();
|
||||
|
||||
if(stage.shaderResourceId == ResourceId())
|
||||
if(state.pipelineResourceId != ResourceId())
|
||||
{
|
||||
shader->setText(ToQStr(stage.shaderResourceId));
|
||||
pipeline->show();
|
||||
pipeline->setText(ToQStr(state.pipelineResourceId));
|
||||
}
|
||||
else
|
||||
{
|
||||
QString shText = ToQStr(stage.shaderResourceId);
|
||||
|
||||
shText = ToQStr(stage.programResourceId) + lit(" > ") + shText;
|
||||
|
||||
if(state.pipelineResourceId != ResourceId())
|
||||
shText = ToQStr(state.pipelineResourceId) + lit(" > ") + shText;
|
||||
|
||||
shader->setText(shText);
|
||||
pipeline->hide();
|
||||
}
|
||||
|
||||
program->setText(ToQStr(stage.programResourceId));
|
||||
shader->setText(ToQStr(stage.shaderResourceId));
|
||||
|
||||
int vs = subs->verticalScrollBar()->value();
|
||||
subs->beginUpdate();
|
||||
subs->clear();
|
||||
@@ -1835,12 +1867,18 @@ void GLPipelineStateViewer::setState()
|
||||
// UBOs don't have to be sorted because there's only one type there, the locations are already
|
||||
// in order
|
||||
|
||||
setShaderState(state.vertexShader, ui->vsShader, ui->vsSubroutines);
|
||||
setShaderState(state.geometryShader, ui->gsShader, ui->gsSubroutines);
|
||||
setShaderState(state.tessControlShader, ui->tcsShader, ui->tcsSubroutines);
|
||||
setShaderState(state.tessEvalShader, ui->tesShader, ui->tesSubroutines);
|
||||
setShaderState(state.fragmentShader, ui->fsShader, ui->fsSubroutines);
|
||||
setShaderState(state.computeShader, ui->csShader, ui->csSubroutines);
|
||||
setShaderState(state.vertexShader, ui->vsPipeline, ui->vsProgram, ui->vsShader,
|
||||
ui->vsSubroutines);
|
||||
setShaderState(state.geometryShader, ui->gsPipeline, ui->gsProgram, ui->gsShader,
|
||||
ui->gsSubroutines);
|
||||
setShaderState(state.tessControlShader, ui->tcsPipeline, ui->tcsProgram, ui->tcsShader,
|
||||
ui->tcsSubroutines);
|
||||
setShaderState(state.tessEvalShader, ui->tesPipeline, ui->tesProgram, ui->tesShader,
|
||||
ui->tesSubroutines);
|
||||
setShaderState(state.fragmentShader, ui->fsPipeline, ui->fsProgram, ui->fsShader,
|
||||
ui->fsSubroutines);
|
||||
setShaderState(state.computeShader, ui->csPipeline, ui->csProgram, ui->csShader,
|
||||
ui->csSubroutines);
|
||||
|
||||
ui->vsReadWrite->parentWidget()->setVisible(ui->vsReadWrite->topLevelItemCount() > 0 &&
|
||||
shaderRefls[0] &&
|
||||
|
||||
@@ -92,7 +92,8 @@ private:
|
||||
const GLPipe::VertexAttribute &val);
|
||||
GLReadWriteType GetGLReadWriteType(ShaderResource res);
|
||||
|
||||
void setShaderState(const GLPipe::Shader &stage, RDLabel *shader, RDTreeWidget *sub);
|
||||
void setShaderState(const GLPipe::Shader &stage, RDLabel *pipeline, RDLabel *program,
|
||||
RDLabel *shader, RDTreeWidget *sub);
|
||||
|
||||
void addUBORow(const Descriptor &descriptor, uint32_t reg, uint32_t index,
|
||||
const ConstantBlock *shaderBind, bool usedSlot, RDTreeWidget *ubos);
|
||||
@@ -106,8 +107,8 @@ private:
|
||||
const GLPipe::TextureCompleteness *texCompleteness,
|
||||
RDTreeWidgetItem *readwrites);
|
||||
|
||||
void clearShaderState(RDLabel *shader, RDTreeWidget *tex, RDTreeWidget *samp, RDTreeWidget *ubo,
|
||||
RDTreeWidget *sub, RDTreeWidget *rw);
|
||||
void clearShaderState(RDLabel *pipeline, RDLabel *program, RDLabel *shader, RDTreeWidget *tex,
|
||||
RDTreeWidget *samp, RDTreeWidget *ubo, RDTreeWidget *sub, RDTreeWidget *rw);
|
||||
void setState();
|
||||
void clearState();
|
||||
|
||||
|
||||
@@ -572,7 +572,13 @@
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="vsShader">
|
||||
<widget class="RDLabel" name="vsPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
@@ -582,8 +588,55 @@
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Open Shader Source</string>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="vsProgram">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="vsShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
@@ -1026,7 +1079,13 @@
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="tcsShader">
|
||||
<widget class="RDLabel" name="tcsPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
@@ -1036,8 +1095,55 @@
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Open Shader Source</string>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="tcsProgram">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="tcsShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
@@ -1480,7 +1586,13 @@
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="tesShader">
|
||||
<widget class="RDLabel" name="tesPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
@@ -1490,8 +1602,55 @@
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Open Shader Source</string>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="tesProgram">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="tesShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
@@ -1934,7 +2093,13 @@
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="gsShader">
|
||||
<widget class="RDLabel" name="gsPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
@@ -1944,8 +2109,55 @@
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Open Shader Source</string>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="gsProgram">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="gsShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
@@ -3368,7 +3580,13 @@
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="fsShader">
|
||||
<widget class="RDLabel" name="fsPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
@@ -3378,8 +3596,55 @@
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Open Shader Source</string>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="fsProgram">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="fsShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
@@ -4339,7 +4604,13 @@
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="csShader">
|
||||
<widget class="RDLabel" name="csPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
@@ -4349,8 +4620,55 @@
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Open Shader Source</string>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="csProgram">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="csShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
|
||||
@@ -148,8 +148,14 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx,
|
||||
const QIcon &action_hover = Icons::action_hover();
|
||||
|
||||
RDLabel *shaderLabels[] = {
|
||||
ui->tsShader, ui->msShader, ui->vsShader, ui->tcsShader,
|
||||
ui->tesShader, ui->gsShader, ui->fsShader, ui->csShader,
|
||||
ui->tsPipeline, ui->msPipeline, ui->vsPipeline, ui->tcsPipeline,
|
||||
ui->tesPipeline, ui->gsPipeline, ui->fsPipeline, ui->csPipeline,
|
||||
|
||||
ui->tsShader, ui->msShader, ui->vsShader, ui->tcsShader,
|
||||
ui->tesShader, ui->gsShader, ui->fsShader, ui->csShader,
|
||||
|
||||
ui->tsShaderDebug, ui->msShaderDebug, ui->vsShaderDebug, ui->tcsShaderDebug,
|
||||
ui->tesShaderDebug, ui->gsShaderDebug, ui->fsShaderDebug, ui->csShaderDebug,
|
||||
};
|
||||
|
||||
RDLabel *pipeLayoutLabels[] = {
|
||||
@@ -201,21 +207,28 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->tesDescSets, ui->gsDescSets, ui->fsDescSets, ui->csDescSets,
|
||||
};
|
||||
|
||||
// setup FlowLayout for CS shader group, with debugging controls
|
||||
{
|
||||
QLayout *oldLayout = ui->csShaderGroup->layout();
|
||||
// setup FlowLayout for shader groups
|
||||
QWidget *shaderGroups[] = {
|
||||
ui->tsShaderGroup, ui->msShaderGroup, ui->vsShaderGroup, ui->tcsShaderGroup,
|
||||
ui->tesShaderGroup, ui->gsShaderGroup, ui->fsShaderGroup, ui->csShaderGroup,
|
||||
};
|
||||
|
||||
QObjectList childs = ui->csShaderGroup->children();
|
||||
// setup FlowLayout for shader groups
|
||||
for(QWidget *shaderGroup : shaderGroups)
|
||||
{
|
||||
QLayout *oldLayout = shaderGroup->layout();
|
||||
|
||||
QObjectList childs = shaderGroup->children();
|
||||
childs.removeOne((QObject *)oldLayout);
|
||||
|
||||
delete oldLayout;
|
||||
|
||||
FlowLayout *csShaderFlow = new FlowLayout(ui->csShaderGroup, -1, 3, 3);
|
||||
FlowLayout *shaderFlow = new FlowLayout(shaderGroup, -1, 3, 3);
|
||||
|
||||
for(QObject *o : childs)
|
||||
csShaderFlow->addWidget(qobject_cast<QWidget *>(o));
|
||||
shaderFlow->addWidget(qobject_cast<QWidget *>(o));
|
||||
|
||||
ui->csShaderGroup->setLayout(csShaderFlow);
|
||||
shaderGroup->setLayout(shaderFlow);
|
||||
}
|
||||
|
||||
for(QToolButton *b : viewButtons)
|
||||
@@ -951,12 +964,16 @@ void VulkanPipelineStateViewer::setNewMeshPipeFlow()
|
||||
ui->pipeFlow->setIsolatedStage(5); // compute shader isolated
|
||||
}
|
||||
|
||||
void VulkanPipelineStateViewer::clearShaderState(RDLabel *shader, RDLabel *pipeLayout,
|
||||
void VulkanPipelineStateViewer::clearShaderState(RDLabel *pipeline, RDLabel *shader,
|
||||
RDLabel *shaderDebug, RDLabel *pipeLayout,
|
||||
RDTreeWidget *resources, RDTreeWidget *cbuffers,
|
||||
RDTreeWidget *descSets)
|
||||
{
|
||||
pipeLayout->setText(tr("Pipeline Layout"));
|
||||
shader->setText(QFormatStr("%1: %1").arg(ToQStr(ResourceId())));
|
||||
pipeline->show();
|
||||
pipeline->setText(ToQStr(ResourceId()));
|
||||
shader->setText(ToQStr(ResourceId()));
|
||||
shaderDebug->hide();
|
||||
resources->clear();
|
||||
cbuffers->clear();
|
||||
descSets->clear();
|
||||
@@ -976,14 +993,22 @@ void VulkanPipelineStateViewer::clearState()
|
||||
ui->primRestart->setVisible(false);
|
||||
ui->topologyDiagram->setPixmap(QPixmap());
|
||||
|
||||
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);
|
||||
clearShaderState(ui->tsPipeline, ui->tsShader, ui->tsShaderDebug, ui->tsPipeLayout,
|
||||
ui->tsResources, ui->tsUBOs, ui->tsDescSets);
|
||||
clearShaderState(ui->msPipeline, ui->msShader, ui->msShaderDebug, ui->msPipeLayout,
|
||||
ui->msResources, ui->msUBOs, ui->msDescSets);
|
||||
clearShaderState(ui->vsPipeline, ui->vsShader, ui->vsShaderDebug, ui->vsPipeLayout,
|
||||
ui->vsResources, ui->vsUBOs, ui->vsDescSets);
|
||||
clearShaderState(ui->tcsPipeline, ui->tcsShader, ui->tcsShaderDebug, ui->tcsPipeLayout,
|
||||
ui->tcsResources, ui->tcsUBOs, ui->tcsDescSets);
|
||||
clearShaderState(ui->tesPipeline, ui->tesShader, ui->tesShaderDebug, ui->tesPipeLayout,
|
||||
ui->tesResources, ui->tesUBOs, ui->tesDescSets);
|
||||
clearShaderState(ui->gsPipeline, ui->gsShader, ui->gsShaderDebug, ui->gsPipeLayout,
|
||||
ui->gsResources, ui->gsUBOs, ui->gsDescSets);
|
||||
clearShaderState(ui->fsPipeline, ui->fsShader, ui->fsShaderDebug, ui->fsPipeLayout,
|
||||
ui->fsResources, ui->fsUBOs, ui->fsDescSets);
|
||||
clearShaderState(ui->csPipeline, ui->csShader, ui->csShaderDebug, ui->csPipeLayout,
|
||||
ui->csResources, ui->csUBOs, ui->csDescSets);
|
||||
|
||||
ui->xfbBuffers->clear();
|
||||
|
||||
@@ -1693,35 +1718,50 @@ void VulkanPipelineStateViewer::addConstantBlockRow(const ConstantBlock *cblock,
|
||||
}
|
||||
|
||||
void VulkanPipelineStateViewer::setShaderState(const VKPipe::Pipeline &pipe,
|
||||
const VKPipe::Shader &stage, RDLabel *shader,
|
||||
const VKPipe::Shader &stage, RDLabel *pipeline,
|
||||
RDLabel *shader, RDLabel *shaderDebug,
|
||||
RDLabel *pipeLayout, RDTreeWidget *descSets)
|
||||
{
|
||||
ShaderReflection *shaderDetails = stage.reflection;
|
||||
|
||||
QString shText;
|
||||
if(stage.shaderObject)
|
||||
shText = QFormatStr("%1").arg(ToQStr(stage.resourceId));
|
||||
{
|
||||
pipeline->hide();
|
||||
shader->setText(ToQStr(stage.resourceId));
|
||||
}
|
||||
else
|
||||
shText = QFormatStr("%1: %2").arg(ToQStr(pipe.pipelineResourceId)).arg(ToQStr(stage.resourceId));
|
||||
{
|
||||
pipeline->show();
|
||||
pipeline->setText(ToQStr(pipe.pipelineResourceId));
|
||||
shader->setText(ToQStr(stage.resourceId));
|
||||
}
|
||||
|
||||
if(shaderDetails != NULL)
|
||||
{
|
||||
QString entryFunc = shaderDetails->entryPoint;
|
||||
|
||||
if(entryFunc != lit("main"))
|
||||
shText += lit(": ") + entryFunc + lit("()");
|
||||
QString shText = entryFunc + lit("()");
|
||||
|
||||
const ShaderDebugInfo &dbg = shaderDetails->debugInfo;
|
||||
int entryFile = qMax(0, dbg.entryLocation.fileIndex);
|
||||
|
||||
if(!dbg.files.isEmpty())
|
||||
shText += lit(" - ") + QFileInfo(dbg.files[entryFile].filename).fileName();
|
||||
{
|
||||
QString filename = QFileInfo(dbg.files[entryFile].filename).fileName();
|
||||
TruncateStringFromEnd(filename);
|
||||
shText += lit(" - ") + filename;
|
||||
}
|
||||
|
||||
if(stage.requiredSubgroupSize != 0)
|
||||
shText += tr(" (Subgroup size %1)").arg(stage.requiredSubgroupSize);
|
||||
|
||||
shaderDebug->show();
|
||||
shaderDebug->setText(shText);
|
||||
}
|
||||
else
|
||||
{
|
||||
shaderDebug->hide();
|
||||
}
|
||||
|
||||
if(stage.requiredSubgroupSize != 0)
|
||||
shText += tr(" (Subgroup size %1)").arg(stage.requiredSubgroupSize);
|
||||
|
||||
shader->setText(shText);
|
||||
|
||||
if(pipe.pipelineComputeLayoutResourceId != ResourceId())
|
||||
{
|
||||
@@ -1952,8 +1992,10 @@ void VulkanPipelineStateViewer::setState()
|
||||
|
||||
if(m_MeshPipe)
|
||||
{
|
||||
setShaderState(state.graphics, state.taskShader, ui->tsShader, ui->tsPipeLayout, ui->tsDescSets);
|
||||
setShaderState(state.graphics, state.meshShader, ui->msShader, ui->msPipeLayout, ui->msDescSets);
|
||||
setShaderState(state.graphics, state.taskShader, ui->tsPipeline, ui->tsShader,
|
||||
ui->tsShaderDebug, ui->tsPipeLayout, ui->tsDescSets);
|
||||
setShaderState(state.graphics, state.meshShader, ui->msPipeline, ui->msShader,
|
||||
ui->msShaderDebug, ui->msPipeLayout, ui->msDescSets);
|
||||
|
||||
if(state.meshShader.reflection)
|
||||
ui->msTopology->setText(ToQStr(state.meshShader.reflection->outputTopology));
|
||||
@@ -2225,19 +2267,20 @@ void VulkanPipelineStateViewer::setState()
|
||||
ui->viBuffers->endUpdate();
|
||||
ui->viBuffers->verticalScrollBar()->setValue(vs);
|
||||
|
||||
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.vertexShader, ui->vsPipeline, ui->vsShader,
|
||||
ui->vsShaderDebug, ui->vsPipeLayout, ui->vsDescSets);
|
||||
setShaderState(state.graphics, state.geometryShader, ui->gsPipeline, ui->gsShader,
|
||||
ui->gsShaderDebug, ui->gsPipeLayout, ui->gsDescSets);
|
||||
setShaderState(state.graphics, state.tessControlShader, ui->tcsPipeline, ui->tcsShader,
|
||||
ui->tcsShaderDebug, ui->tcsPipeLayout, ui->tcsDescSets);
|
||||
setShaderState(state.graphics, state.tessEvalShader, ui->tesPipeline, ui->tesShader,
|
||||
ui->tesShaderDebug, ui->tesPipeLayout, ui->tesDescSets);
|
||||
}
|
||||
|
||||
setShaderState(state.graphics, state.fragmentShader, ui->fsShader, ui->fsPipeLayout,
|
||||
ui->fsDescSets);
|
||||
setShaderState(state.compute, state.computeShader, ui->csShader, ui->csPipeLayout, ui->csDescSets);
|
||||
setShaderState(state.graphics, state.fragmentShader, ui->fsPipeline, ui->fsShader,
|
||||
ui->fsShaderDebug, ui->fsPipeLayout, ui->fsDescSets);
|
||||
setShaderState(state.compute, state.computeShader, ui->csPipeline, ui->csShader,
|
||||
ui->csShaderDebug, ui->csPipeLayout, ui->csDescSets);
|
||||
|
||||
// fill in descriptor access
|
||||
{
|
||||
|
||||
@@ -112,10 +112,11 @@ 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,
|
||||
RDLabel *pipeLayout, RDTreeWidget *descSets);
|
||||
void clearShaderState(RDLabel *shader, RDLabel *pipeLayout, RDTreeWidget *resources,
|
||||
RDTreeWidget *cbuffers, RDTreeWidget *descSets);
|
||||
void setShaderState(const VKPipe::Pipeline &pipe, const VKPipe::Shader &stage, RDLabel *pipeline,
|
||||
RDLabel *shader, RDLabel *shaderDebug, RDLabel *pipeLayout,
|
||||
RDTreeWidget *descSets);
|
||||
void clearShaderState(RDLabel *pipeline, RDLabel *shader, RDLabel *shaderDebug, RDLabel *pipeLayout,
|
||||
RDTreeWidget *resources, RDTreeWidget *cbuffers, RDTreeWidget *descSets);
|
||||
void setState();
|
||||
void clearState();
|
||||
|
||||
|
||||
@@ -521,8 +521,46 @@
|
||||
<property name="bottomMargin">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="vsPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<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="RDLabel" name="vsShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<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="RDLabel" name="vsShaderDebug">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
@@ -910,8 +948,46 @@
|
||||
<property name="bottomMargin">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="tcsPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<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="RDLabel" name="tcsShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<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="RDLabel" name="tcsShaderDebug">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
@@ -1299,8 +1375,46 @@
|
||||
<property name="bottomMargin">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="tesPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<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="RDLabel" name="tesShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<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="RDLabel" name="tesShaderDebug">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
@@ -1688,8 +1802,46 @@
|
||||
<property name="bottomMargin">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="gsPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<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="RDLabel" name="gsShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<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="RDLabel" name="gsShaderDebug">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
@@ -3200,8 +3352,46 @@
|
||||
<property name="bottomMargin">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="fsPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<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="RDLabel" name="fsShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<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="RDLabel" name="fsShaderDebug">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
@@ -4145,10 +4335,36 @@
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="csPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="csShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="RDLabel" name="csShaderDebug">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
@@ -4632,8 +4848,46 @@
|
||||
<property name="bottomMargin">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="tsPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<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="RDLabel" name="tsShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<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="RDLabel" name="tsShaderDebug">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
@@ -5021,8 +5275,46 @@
|
||||
<property name="bottomMargin">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="RDLabel" name="msPipeline">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<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="RDLabel" name="msShader">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<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="RDLabel" name="msShaderDebug">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
|
||||
Reference in New Issue
Block a user