Support mesh output from different view indices on vulkan

* When using VK_KHR_multiview you can select which view to view the mesh data from.
This commit is contained in:
baldurk
2018-06-19 20:48:30 +01:00
parent ad2673965d
commit 53364adeef
31 changed files with 220 additions and 70 deletions
+24 -2
View File
@@ -1020,6 +1020,7 @@ BufferViewer::BufferViewer(ICaptureContext &ctx, bool meshview, QWidget *parent)
ui->rowOffset->setFont(Formatter::PreferredFont());
ui->instance->setFont(Formatter::PreferredFont());
ui->viewIndex->setFont(Formatter::PreferredFont());
ui->camSpeed->setFont(Formatter::PreferredFont());
ui->fovGuess->setFont(Formatter::PreferredFont());
ui->aspectGuess->setFont(Formatter::PreferredFont());
@@ -1147,6 +1148,8 @@ void BufferViewer::SetupRawView()
ui->syncViews->setVisible(false);
ui->instanceLabel->setVisible(false);
ui->instance->setVisible(false);
ui->viewLabel->setVisible(false);
ui->viewIndex->setVisible(false);
ui->vsinData->setWindowTitle(tr("Buffer Contents"));
ui->vsinData->setFrameShape(QFrame::NoFrame);
@@ -1460,6 +1463,19 @@ void BufferViewer::OnEventChanged(uint32_t eventId)
if(draw)
ui->instance->setMaximum(qMax(0, int(draw->numInstances) - 1));
uint32_t numViews = m_Ctx.CurPipelineState().MultiviewBroadcastCount();
if(draw && numViews > 1)
{
ui->viewIndex->setEnabled(true);
ui->viewIndex->setMaximum(qMax(0, int(numViews) - 1));
}
else
{
ui->viewIndex->setEnabled(false);
ui->viewIndex->setValue(0);
}
if(m_MeshView)
{
configureMeshColumns();
@@ -1716,7 +1732,7 @@ void BufferViewer::RT_FetchMeshData(IReplayController *r)
m_ModelVSIn->buffers.push_back(buf);
}
m_PostVS = r->GetPostVSData(m_Config.curInstance, MeshDataStage::VSOut);
m_PostVS = r->GetPostVSData(m_Config.curInstance, m_Config.curView, MeshDataStage::VSOut);
m_ModelVSOut->numRows = m_PostVS.numIndices;
m_ModelVSOut->unclampedNumRows = 0;
@@ -1778,7 +1794,7 @@ void BufferViewer::RT_FetchMeshData(IReplayController *r)
m_ModelVSOut->buffers.push_back(postvs);
}
m_PostGS = r->GetPostVSData(m_Config.curInstance, MeshDataStage::GSOut);
m_PostGS = r->GetPostVSData(m_Config.curInstance, m_Config.curView, MeshDataStage::GSOut);
m_ModelGSOut->numRows = m_PostGS.numIndices;
m_ModelGSOut->unclampedNumRows = 0;
@@ -3572,6 +3588,12 @@ void BufferViewer::on_instance_valueChanged(int value)
OnEventChanged(m_Ctx.CurEvent());
}
void BufferViewer::on_viewIndex_valueChanged(int value)
{
m_Config.curView = value;
OnEventChanged(m_Ctx.CurEvent());
}
void BufferViewer::on_rowOffset_valueChanged(int value)
{
ScrollToRow(m_ModelVSIn, value);
+1
View File
@@ -105,6 +105,7 @@ private slots:
void on_controlType_currentIndexChanged(int index);
void on_camSpeed_valueChanged(double value);
void on_instance_valueChanged(int value);
void on_viewIndex_valueChanged(int value);
void on_rowOffset_valueChanged(int value);
void on_byteRangeStart_valueChanged(int value);
void on_byteRangeLength_valueChanged(int value);
+14
View File
@@ -787,6 +787,20 @@
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="viewLabel">
<property name="text">
<string>View</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="viewIndex">
<property name="maximum">
<number>16</number>
</property>
</widget>
</item>
<item>
<widget class="Line" name="byteRangeLine">
<property name="orientation">