Pass pipeline state around by reference instead of copying by value

This commit is contained in:
baldurk
2017-08-18 19:37:18 +01:00
parent 8ae1c650b0
commit 9b4ee72af6
29 changed files with 217 additions and 202 deletions
+18 -17
View File
@@ -263,12 +263,12 @@ void CaptureContext::LoadLogfileThreaded(const QString &logFile, const QString &
m_PostloadProgress = 0.9f; m_PostloadProgress = 0.9f;
m_CurD3D11PipelineState = r->GetD3D11PipelineState(); m_CurD3D11PipelineState = &r->GetD3D11PipelineState();
m_CurD3D12PipelineState = r->GetD3D12PipelineState(); m_CurD3D12PipelineState = &r->GetD3D12PipelineState();
m_CurGLPipelineState = r->GetGLPipelineState(); m_CurGLPipelineState = &r->GetGLPipelineState();
m_CurVulkanPipelineState = r->GetVulkanPipelineState(); m_CurVulkanPipelineState = &r->GetVulkanPipelineState();
m_CurPipelineState.SetStates(m_APIProps, &m_CurD3D11PipelineState, &m_CurD3D12PipelineState, m_CurPipelineState.SetStates(m_APIProps, m_CurD3D11PipelineState, m_CurD3D12PipelineState,
&m_CurGLPipelineState, &m_CurVulkanPipelineState); m_CurGLPipelineState, m_CurVulkanPipelineState);
m_UnreadMessageCount = 0; m_UnreadMessageCount = 0;
AddMessages(m_FrameInfo.debugMessages); AddMessages(m_FrameInfo.debugMessages);
@@ -534,11 +534,12 @@ void CaptureContext::CloseLogfile()
m_Drawcalls.clear(); m_Drawcalls.clear();
m_FirstDrawcall = m_LastDrawcall = NULL; m_FirstDrawcall = m_LastDrawcall = NULL;
m_CurD3D11PipelineState = D3D11Pipe::State(); m_CurD3D11PipelineState = NULL;
m_CurD3D12PipelineState = D3D12Pipe::State(); m_CurD3D12PipelineState = NULL;
m_CurGLPipelineState = GLPipe::State(); m_CurGLPipelineState = NULL;
m_CurVulkanPipelineState = VKPipe::State(); m_CurVulkanPipelineState = NULL;
m_CurPipelineState.SetStates(m_APIProps, NULL, NULL, NULL, NULL); m_CurPipelineState.SetStates(m_APIProps, m_CurD3D11PipelineState, m_CurD3D12PipelineState,
m_CurGLPipelineState, m_CurVulkanPipelineState);
m_DebugMessages.clear(); m_DebugMessages.clear();
m_UnreadMessageCount = 0; m_UnreadMessageCount = 0;
@@ -564,12 +565,12 @@ void CaptureContext::SetEventID(const QVector<ILogViewer *> &exclude, uint32_t s
m_Renderer.BlockInvoke([this, eventID, force](IReplayController *r) { m_Renderer.BlockInvoke([this, eventID, force](IReplayController *r) {
r->SetFrameEvent(eventID, force); r->SetFrameEvent(eventID, force);
m_CurD3D11PipelineState = r->GetD3D11PipelineState(); m_CurD3D11PipelineState = &r->GetD3D11PipelineState();
m_CurD3D12PipelineState = r->GetD3D12PipelineState(); m_CurD3D12PipelineState = &r->GetD3D12PipelineState();
m_CurGLPipelineState = r->GetGLPipelineState(); m_CurGLPipelineState = &r->GetGLPipelineState();
m_CurVulkanPipelineState = r->GetVulkanPipelineState(); m_CurVulkanPipelineState = &r->GetVulkanPipelineState();
m_CurPipelineState.SetStates(m_APIProps, &m_CurD3D11PipelineState, &m_CurD3D12PipelineState, m_CurPipelineState.SetStates(m_APIProps, m_CurD3D11PipelineState, m_CurD3D12PipelineState,
&m_CurGLPipelineState, &m_CurVulkanPipelineState); m_CurGLPipelineState, m_CurVulkanPipelineState);
}); });
for(ILogViewer *logviewer : m_LogViewers) for(ILogViewer *logviewer : m_LogViewers)
+8 -8
View File
@@ -186,19 +186,19 @@ public:
void AddDockWindow(QWidget *newWindow, DockReference ref, QWidget *refWindow, void AddDockWindow(QWidget *newWindow, DockReference ref, QWidget *refWindow,
float percentage = 0.5f) override; float percentage = 0.5f) override;
D3D11Pipe::State &CurD3D11PipelineState() override { return m_CurD3D11PipelineState; } const D3D11Pipe::State &CurD3D11PipelineState() override { return *m_CurD3D11PipelineState; }
D3D12Pipe::State &CurD3D12PipelineState() override { return m_CurD3D12PipelineState; } const D3D12Pipe::State &CurD3D12PipelineState() override { return *m_CurD3D12PipelineState; }
GLPipe::State &CurGLPipelineState() override { return m_CurGLPipelineState; } const GLPipe::State &CurGLPipelineState() override { return *m_CurGLPipelineState; }
VKPipe::State &CurVulkanPipelineState() override { return m_CurVulkanPipelineState; } const VKPipe::State &CurVulkanPipelineState() override { return *m_CurVulkanPipelineState; }
CommonPipelineState &CurPipelineState() override { return m_CurPipelineState; } CommonPipelineState &CurPipelineState() override { return m_CurPipelineState; }
PersistantConfig &Config() override { return m_Config; } PersistantConfig &Config() override { return m_Config; }
private: private:
ReplayManager m_Renderer; ReplayManager m_Renderer;
D3D11Pipe::State m_CurD3D11PipelineState; const D3D11Pipe::State *m_CurD3D11PipelineState;
D3D12Pipe::State m_CurD3D12PipelineState; const D3D12Pipe::State *m_CurD3D12PipelineState;
GLPipe::State m_CurGLPipelineState; const GLPipe::State *m_CurGLPipelineState;
VKPipe::State m_CurVulkanPipelineState; const VKPipe::State *m_CurVulkanPipelineState;
CommonPipelineState m_CurPipelineState; CommonPipelineState m_CurPipelineState;
PersistantConfig &m_Config; PersistantConfig &m_Config;
@@ -928,7 +928,7 @@ BoundCBuffer CommonPipelineState::GetConstantBuffer(ShaderStage stage, uint32_t
s.BindpointMapping.ConstantBlocks[s.ShaderDetails->ConstantBlocks[BufIdx].bindPoint].bind; s.BindpointMapping.ConstantBlocks[s.ShaderDetails->ConstantBlocks[BufIdx].bindPoint].bind;
if(uboIdx >= 0 && uboIdx < m_GL->UniformBuffers.count) if(uboIdx >= 0 && uboIdx < m_GL->UniformBuffers.count)
{ {
GLPipe::Buffer &b = m_GL->UniformBuffers[uboIdx]; const GLPipe::Buffer &b = m_GL->UniformBuffers[uboIdx];
buf = b.Resource; buf = b.Resource;
ByteOffset = b.Offset; ByteOffset = b.Offset;
@@ -939,7 +939,8 @@ BoundCBuffer CommonPipelineState::GetConstantBuffer(ShaderStage stage, uint32_t
} }
else if(IsLogVK()) else if(IsLogVK())
{ {
VKPipe::Pipeline &pipe = stage == ShaderStage::Compute ? m_Vulkan->compute : m_Vulkan->graphics; const VKPipe::Pipeline &pipe =
stage == ShaderStage::Compute ? m_Vulkan->compute : m_Vulkan->graphics;
const VKPipe::Shader &s = GetVulkanStage(stage); const VKPipe::Shader &s = GetVulkanStage(stage);
if(s.ShaderDetails != NULL && BufIdx < (uint32_t)s.ShaderDetails->ConstantBlocks.count) if(s.ShaderDetails != NULL && BufIdx < (uint32_t)s.ShaderDetails->ConstantBlocks.count)
@@ -145,8 +145,8 @@ public:
:param ~renderdoc.GL_State gl: The OpenGL state. :param ~renderdoc.GL_State gl: The OpenGL state.
:param ~renderdoc.VK_State vk: The Vulkan state. :param ~renderdoc.VK_State vk: The Vulkan state.
)"); )");
void SetStates(APIProperties props, D3D11Pipe::State *d3d11, D3D12Pipe::State *d3d12, void SetStates(APIProperties props, const D3D11Pipe::State *d3d11, const D3D12Pipe::State *d3d12,
GLPipe::State *gl, VKPipe::State *vk) const GLPipe::State *gl, const VKPipe::State *vk)
{ {
m_APIProps = props; m_APIProps = props;
m_D3D11 = d3d11; m_D3D11 = d3d11;
@@ -422,10 +422,10 @@ Typically this is ``glsl`` or ``hlsl``.
QVector<BoundResource> GetOutputTargets(); QVector<BoundResource> GetOutputTargets();
private: private:
D3D11Pipe::State *m_D3D11 = NULL; const D3D11Pipe::State *m_D3D11 = NULL;
D3D12Pipe::State *m_D3D12 = NULL; const D3D12Pipe::State *m_D3D12 = NULL;
GLPipe::State *m_GL = NULL; const GLPipe::State *m_GL = NULL;
VKPipe::State *m_Vulkan = NULL; const VKPipe::State *m_Vulkan = NULL;
APIProperties m_APIProps; APIProperties m_APIProps;
const D3D11Pipe::Shader &GetD3D11Stage(ShaderStage stage); const D3D11Pipe::Shader &GetD3D11Stage(ShaderStage stage);
+4 -4
View File
@@ -1386,28 +1386,28 @@ currently docked.
:return: The current D3D11 pipeline state. :return: The current D3D11 pipeline state.
:rtype: ~renderdoc.D3D11_State :rtype: ~renderdoc.D3D11_State
)"); )");
virtual D3D11Pipe::State &CurD3D11PipelineState() = 0; virtual const D3D11Pipe::State &CurD3D11PipelineState() = 0;
DOCUMENT(R"(Retrieve the current :class:`~renderdoc.D3D12_State` pipeline state. DOCUMENT(R"(Retrieve the current :class:`~renderdoc.D3D12_State` pipeline state.
:return: The current D3D12 pipeline state. :return: The current D3D12 pipeline state.
:rtype: ~renderdoc.D3D12_State :rtype: ~renderdoc.D3D12_State
)"); )");
virtual D3D12Pipe::State &CurD3D12PipelineState() = 0; virtual const D3D12Pipe::State &CurD3D12PipelineState() = 0;
DOCUMENT(R"(Retrieve the current :class:`~renderdoc.GL_State` pipeline state. DOCUMENT(R"(Retrieve the current :class:`~renderdoc.GL_State` pipeline state.
:return: The current OpenGL pipeline state. :return: The current OpenGL pipeline state.
:rtype: ~renderdoc.GL_State :rtype: ~renderdoc.GL_State
)"); )");
virtual GLPipe::State &CurGLPipelineState() = 0; virtual const GLPipe::State &CurGLPipelineState() = 0;
DOCUMENT(R"(Retrieve the current :class:`~renderdoc.VK_State` pipeline state. DOCUMENT(R"(Retrieve the current :class:`~renderdoc.VK_State` pipeline state.
:return: The current Vulkan pipeline state. :return: The current Vulkan pipeline state.
:rtype: ~renderdoc.VK_State :rtype: ~renderdoc.VK_State
)"); )");
virtual VKPipe::State &CurVulkanPipelineState() = 0; virtual const VKPipe::State &CurVulkanPipelineState() = 0;
DOCUMENT(R"(Retrieve the current :class:`CommonPipelineState` abstracted pipeline state. DOCUMENT(R"(Retrieve the current :class:`CommonPipelineState` abstracted pipeline state.
@@ -2261,7 +2261,7 @@ void D3D11PipelineStateViewer::shaderSave_clicked()
m_Common.SaveShaderFile(shaderDetails); m_Common.SaveShaderFile(shaderDetails);
} }
QVariantList D3D11PipelineStateViewer::exportViewHTML(D3D11Pipe::View &view, int i, QVariantList D3D11PipelineStateViewer::exportViewHTML(const D3D11Pipe::View &view, int i,
ShaderReflection *refl, ShaderReflection *refl,
const QString &extraParams) const QString &extraParams)
{ {
@@ -2385,7 +2385,7 @@ QVariantList D3D11PipelineStateViewer::exportViewHTML(D3D11Pipe::View &view, int
d, a, viewFormat, format, viewParams}; d, a, viewFormat, format, viewParams};
} }
void D3D11PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, D3D11Pipe::IA &ia) void D3D11PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const D3D11Pipe::IA &ia)
{ {
{ {
xml.writeStartElement(lit("h3")); xml.writeStartElement(lit("h3"));
@@ -2483,7 +2483,7 @@ void D3D11PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, D3D11Pipe::IA &
m_Common.exportHTMLTable(xml, {tr("Primitive Topology")}, {ToQStr(m_Ctx.CurDrawcall()->topology)}); m_Common.exportHTMLTable(xml, {tr("Primitive Topology")}, {ToQStr(m_Ctx.CurDrawcall()->topology)});
} }
void D3D11PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, D3D11Pipe::Shader &sh) void D3D11PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const D3D11Pipe::Shader &sh)
{ {
ShaderReflection *shaderDetails = sh.ShaderDetails; ShaderReflection *shaderDetails = sh.ShaderDetails;
@@ -2697,7 +2697,7 @@ void D3D11PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, D3D11Pipe::Shad
} }
} }
void D3D11PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, D3D11Pipe::SO &so) void D3D11PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const D3D11Pipe::SO &so)
{ {
{ {
xml.writeStartElement(lit("h3")); xml.writeStartElement(lit("h3"));
@@ -2735,7 +2735,7 @@ void D3D11PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, D3D11Pipe::SO &
} }
} }
void D3D11PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, D3D11Pipe::Rasterizer &rs) void D3D11PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const D3D11Pipe::Rasterizer &rs)
{ {
{ {
xml.writeStartElement(lit("h3")); xml.writeStartElement(lit("h3"));
@@ -2812,7 +2812,7 @@ void D3D11PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, D3D11Pipe::Rast
} }
} }
void D3D11PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, D3D11Pipe::OM &om) void D3D11PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const D3D11Pipe::OM &om)
{ {
{ {
xml.writeStartElement(lit("h3")); xml.writeStartElement(lit("h3"));
@@ -93,13 +93,13 @@ private:
void setState(); void setState();
void clearState(); void clearState();
QVariantList exportViewHTML(D3D11Pipe::View &view, int i, ShaderReflection *refl, QVariantList exportViewHTML(const D3D11Pipe::View &view, int i, ShaderReflection *refl,
const QString &extraParams); const QString &extraParams);
void exportHTML(QXmlStreamWriter &xml, D3D11Pipe::IA &ia); void exportHTML(QXmlStreamWriter &xml, const D3D11Pipe::IA &ia);
void exportHTML(QXmlStreamWriter &xml, D3D11Pipe::Shader &sh); void exportHTML(QXmlStreamWriter &xml, const D3D11Pipe::Shader &sh);
void exportHTML(QXmlStreamWriter &xml, D3D11Pipe::SO &so); void exportHTML(QXmlStreamWriter &xml, const D3D11Pipe::SO &so);
void exportHTML(QXmlStreamWriter &xml, D3D11Pipe::Rasterizer &rs); void exportHTML(QXmlStreamWriter &xml, const D3D11Pipe::Rasterizer &rs);
void exportHTML(QXmlStreamWriter &xml, D3D11Pipe::OM &om); void exportHTML(QXmlStreamWriter &xml, const D3D11Pipe::OM &om);
void setInactiveRow(RDTreeWidgetItem *node); void setInactiveRow(RDTreeWidgetItem *node);
void setEmptyRow(RDTreeWidgetItem *node); void setEmptyRow(RDTreeWidgetItem *node);
@@ -2254,7 +2254,7 @@ QVariantList D3D12PipelineStateViewer::exportViewHTML(const D3D12Pipe::View &vie
a, viewFormat, format, viewParams}; a, viewFormat, format, viewParams};
} }
void D3D12PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, D3D12Pipe::IA &ia) void D3D12PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const D3D12Pipe::IA &ia)
{ {
{ {
xml.writeStartElement(lit("h3")); xml.writeStartElement(lit("h3"));
@@ -2356,7 +2356,7 @@ void D3D12PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, D3D12Pipe::IA &
m_Common.exportHTMLTable(xml, {tr("Primitive Topology")}, {ToQStr(m_Ctx.CurDrawcall()->topology)}); m_Common.exportHTMLTable(xml, {tr("Primitive Topology")}, {ToQStr(m_Ctx.CurDrawcall()->topology)});
} }
void D3D12PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, D3D12Pipe::Shader &sh) void D3D12PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const D3D12Pipe::Shader &sh)
{ {
ShaderReflection *shaderDetails = sh.ShaderDetails; ShaderReflection *shaderDetails = sh.ShaderDetails;
@@ -2716,7 +2716,7 @@ void D3D12PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, D3D12Pipe::Shad
} }
} }
void D3D12PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, D3D12Pipe::Streamout &so) void D3D12PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const D3D12Pipe::Streamout &so)
{ {
{ {
xml.writeStartElement(lit("h3")); xml.writeStartElement(lit("h3"));
@@ -2776,7 +2776,7 @@ void D3D12PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, D3D12Pipe::Stre
} }
} }
void D3D12PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, D3D12Pipe::Rasterizer &rs) void D3D12PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const D3D12Pipe::Rasterizer &rs)
{ {
{ {
xml.writeStartElement(lit("h3")); xml.writeStartElement(lit("h3"));
@@ -2853,7 +2853,7 @@ void D3D12PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, D3D12Pipe::Rast
} }
} }
void D3D12PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, D3D12Pipe::OM &om) void D3D12PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const D3D12Pipe::OM &om)
{ {
{ {
xml.writeStartElement(lit("h3")); xml.writeStartElement(lit("h3"));
@@ -109,11 +109,11 @@ private:
QVariantList exportViewHTML(const D3D12Pipe::View &view, bool rw, QVariantList exportViewHTML(const D3D12Pipe::View &view, bool rw,
const ShaderResource *shaderInput, const QString &extraParams); const ShaderResource *shaderInput, const QString &extraParams);
void exportHTML(QXmlStreamWriter &xml, D3D12Pipe::IA &ia); void exportHTML(QXmlStreamWriter &xml, const D3D12Pipe::IA &ia);
void exportHTML(QXmlStreamWriter &xml, D3D12Pipe::Shader &sh); void exportHTML(QXmlStreamWriter &xml, const D3D12Pipe::Shader &sh);
void exportHTML(QXmlStreamWriter &xml, D3D12Pipe::Streamout &so); void exportHTML(QXmlStreamWriter &xml, const D3D12Pipe::Streamout &so);
void exportHTML(QXmlStreamWriter &xml, D3D12Pipe::Rasterizer &rs); void exportHTML(QXmlStreamWriter &xml, const D3D12Pipe::Rasterizer &rs);
void exportHTML(QXmlStreamWriter &xml, D3D12Pipe::OM &om); void exportHTML(QXmlStreamWriter &xml, const D3D12Pipe::OM &om);
// keep track of the VB nodes (we want to be able to highlight them easily on hover) // keep track of the VB nodes (we want to be able to highlight them easily on hover)
QList<RDTreeWidgetItem *> m_VBNodes; QList<RDTreeWidgetItem *> m_VBNodes;
@@ -2264,7 +2264,7 @@ void GLPipelineStateViewer::shaderSave_clicked()
m_Common.SaveShaderFile(shaderDetails); m_Common.SaveShaderFile(shaderDetails);
} }
void GLPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, GLPipe::VertexInput &vtx) void GLPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const GLPipe::VertexInput &vtx)
{ {
const GLPipe::State &pipe = m_Ctx.CurGLPipelineState(); const GLPipe::State &pipe = m_Ctx.CurGLPipelineState();
{ {
@@ -2419,7 +2419,7 @@ void GLPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, GLPipe::VertexInpu
} }
} }
void GLPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, GLPipe::Shader &sh) void GLPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const GLPipe::Shader &sh)
{ {
const GLPipe::State &pipe = m_Ctx.CurGLPipelineState(); const GLPipe::State &pipe = m_Ctx.CurGLPipelineState();
ShaderReflection *shaderDetails = sh.ShaderDetails; ShaderReflection *shaderDetails = sh.ShaderDetails;
@@ -2870,7 +2870,7 @@ void GLPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, GLPipe::Shader &sh
} }
} }
void GLPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, GLPipe::Feedback &xfb) void GLPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const GLPipe::Feedback &xfb)
{ {
const GLPipe::State &pipe = m_Ctx.CurGLPipelineState(); const GLPipe::State &pipe = m_Ctx.CurGLPipelineState();
{ {
@@ -2919,7 +2919,7 @@ void GLPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, GLPipe::Feedback &
} }
} }
void GLPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, GLPipe::Rasterizer &rs) void GLPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const GLPipe::Rasterizer &rs)
{ {
const GLPipe::State &pipe = m_Ctx.CurGLPipelineState(); const GLPipe::State &pipe = m_Ctx.CurGLPipelineState();
xml.writeStartElement(tr("h3")); xml.writeStartElement(tr("h3"));
@@ -3037,7 +3037,7 @@ void GLPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, GLPipe::Rasterizer
} }
} }
void GLPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, GLPipe::FrameBuffer &fb) void GLPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const GLPipe::FrameBuffer &fb)
{ {
const GLPipe::State &pipe = m_Ctx.CurGLPipelineState(); const GLPipe::State &pipe = m_Ctx.CurGLPipelineState();
{ {
@@ -107,11 +107,11 @@ private:
bool showNode(bool usedSlot, bool filledSlot); bool showNode(bool usedSlot, bool filledSlot);
void exportHTML(QXmlStreamWriter &xml, GLPipe::VertexInput &vtx); void exportHTML(QXmlStreamWriter &xml, const GLPipe::VertexInput &vtx);
void exportHTML(QXmlStreamWriter &xml, GLPipe::Shader &sh); void exportHTML(QXmlStreamWriter &xml, const GLPipe::Shader &sh);
void exportHTML(QXmlStreamWriter &xml, GLPipe::Feedback &xfb); void exportHTML(QXmlStreamWriter &xml, const GLPipe::Feedback &xfb);
void exportHTML(QXmlStreamWriter &xml, GLPipe::Rasterizer &rs); void exportHTML(QXmlStreamWriter &xml, const GLPipe::Rasterizer &rs);
void exportHTML(QXmlStreamWriter &xml, GLPipe::FrameBuffer &fb); void exportHTML(QXmlStreamWriter &xml, const GLPipe::FrameBuffer &fb);
// keep track of the VB nodes (we want to be able to highlight them easily on hover) // keep track of the VB nodes (we want to be able to highlight them easily on hover)
QList<RDTreeWidgetItem *> m_VBNodes; QList<RDTreeWidgetItem *> m_VBNodes;
@@ -2403,7 +2403,7 @@ void VulkanPipelineStateViewer::shaderSave_clicked()
m_Common.SaveShaderFile(shaderDetails); m_Common.SaveShaderFile(shaderDetails);
} }
void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, VKPipe::VertexInput &vi) void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const VKPipe::VertexInput &vi)
{ {
{ {
xml.writeStartElement(lit("h3")); xml.writeStartElement(lit("h3"));
@@ -2469,7 +2469,7 @@ void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, VKPipe::Vertex
} }
} }
void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, VKPipe::InputAssembly &ia) void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const VKPipe::InputAssembly &ia)
{ {
{ {
xml.writeStartElement(lit("h3")); xml.writeStartElement(lit("h3"));
@@ -2507,7 +2507,7 @@ void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, VKPipe::InputA
{ToQStr(m_Ctx.CurDrawcall()->topology), m_Ctx.CurVulkanPipelineState().Tess.numControlPoints}); {ToQStr(m_Ctx.CurDrawcall()->topology), m_Ctx.CurVulkanPipelineState().Tess.numControlPoints});
} }
void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, VKPipe::Shader &sh) void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const VKPipe::Shader &sh)
{ {
ShaderReflection *shaderDetails = sh.ShaderDetails; ShaderReflection *shaderDetails = sh.ShaderDetails;
@@ -2862,7 +2862,7 @@ void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, VKPipe::Shader
} }
} }
void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, VKPipe::Raster &rs) void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const VKPipe::Raster &rs)
{ {
{ {
xml.writeStartElement(lit("h3")); xml.writeStartElement(lit("h3"));
@@ -2889,7 +2889,7 @@ void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, VKPipe::Raster
Formatter::Format(rs.slopeScaledDepthBias), Formatter::Format(rs.lineWidth)}); Formatter::Format(rs.slopeScaledDepthBias), Formatter::Format(rs.lineWidth)});
} }
VKPipe::MultiSample &msaa = m_Ctx.CurVulkanPipelineState().MSAA; const VKPipe::MultiSample &msaa = m_Ctx.CurVulkanPipelineState().MSAA;
{ {
xml.writeStartElement(lit("h3")); xml.writeStartElement(lit("h3"));
@@ -2903,7 +2903,7 @@ void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, VKPipe::Raster
Formatter::Format(msaa.minSampleShading), Formatter::Format(msaa.sampleMask, true)}); Formatter::Format(msaa.minSampleShading), Formatter::Format(msaa.sampleMask, true)});
} }
VKPipe::ViewState &vp = m_Ctx.CurVulkanPipelineState().VP; const VKPipe::ViewState &vp = m_Ctx.CurVulkanPipelineState().VP;
{ {
xml.writeStartElement(lit("h3")); xml.writeStartElement(lit("h3"));
@@ -2948,7 +2948,7 @@ void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, VKPipe::Raster
} }
} }
void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, VKPipe::ColorBlend &cb) void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const VKPipe::ColorBlend &cb)
{ {
xml.writeStartElement(lit("h3")); xml.writeStartElement(lit("h3"));
xml.writeCharacters(tr("Color Blend State")); xml.writeCharacters(tr("Color Blend State"));
@@ -2998,7 +2998,7 @@ void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, VKPipe::ColorB
rows); rows);
} }
void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, VKPipe::DepthStencil &ds) void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const VKPipe::DepthStencil &ds)
{ {
{ {
xml.writeStartElement(lit("h3")); xml.writeStartElement(lit("h3"));
@@ -3055,7 +3055,7 @@ void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, VKPipe::DepthS
} }
} }
void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, VKPipe::CurrentPass &pass) void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const VKPipe::CurrentPass &pass)
{ {
{ {
xml.writeStartElement(lit("h3")); xml.writeStartElement(lit("h3"));
@@ -118,13 +118,13 @@ private:
bool showNode(bool usedSlot, bool filledSlot); bool showNode(bool usedSlot, bool filledSlot);
void exportHTML(QXmlStreamWriter &xml, VKPipe::VertexInput &vi); void exportHTML(QXmlStreamWriter &xml, const VKPipe::VertexInput &vi);
void exportHTML(QXmlStreamWriter &xml, VKPipe::InputAssembly &ia); void exportHTML(QXmlStreamWriter &xml, const VKPipe::InputAssembly &ia);
void exportHTML(QXmlStreamWriter &xml, VKPipe::Shader &sh); void exportHTML(QXmlStreamWriter &xml, const VKPipe::Shader &sh);
void exportHTML(QXmlStreamWriter &xml, VKPipe::Raster &rs); void exportHTML(QXmlStreamWriter &xml, const VKPipe::Raster &rs);
void exportHTML(QXmlStreamWriter &xml, VKPipe::ColorBlend &cb); void exportHTML(QXmlStreamWriter &xml, const VKPipe::ColorBlend &cb);
void exportHTML(QXmlStreamWriter &xml, VKPipe::DepthStencil &ds); void exportHTML(QXmlStreamWriter &xml, const VKPipe::DepthStencil &ds);
void exportHTML(QXmlStreamWriter &xml, VKPipe::CurrentPass &pass); void exportHTML(QXmlStreamWriter &xml, const VKPipe::CurrentPass &pass);
// keep track of the VB nodes (we want to be able to highlight them easily on hover) // keep track of the VB nodes (we want to be able to highlight them easily on hover)
QList<RDTreeWidgetItem *> m_VBNodes; QList<RDTreeWidgetItem *> m_VBNodes;
+4 -4
View File
@@ -99,16 +99,16 @@ struct CaptureContextInvoker : ICaptureContext
virtual const QVector<DebugMessage> &DebugMessages() override { return m_Ctx.DebugMessages(); } virtual const QVector<DebugMessage> &DebugMessages() override { return m_Ctx.DebugMessages(); }
virtual int UnreadMessageCount() override { return m_Ctx.UnreadMessageCount(); } virtual int UnreadMessageCount() override { return m_Ctx.UnreadMessageCount(); }
virtual void MarkMessagesRead() override { return m_Ctx.MarkMessagesRead(); } virtual void MarkMessagesRead() override { return m_Ctx.MarkMessagesRead(); }
virtual D3D11Pipe::State &CurD3D11PipelineState() override virtual const D3D11Pipe::State &CurD3D11PipelineState() override
{ {
return m_Ctx.CurD3D11PipelineState(); return m_Ctx.CurD3D11PipelineState();
} }
virtual D3D12Pipe::State &CurD3D12PipelineState() override virtual const D3D12Pipe::State &CurD3D12PipelineState() override
{ {
return m_Ctx.CurD3D12PipelineState(); return m_Ctx.CurD3D12PipelineState();
} }
virtual GLPipe::State &CurGLPipelineState() override { return m_Ctx.CurGLPipelineState(); } virtual const GLPipe::State &CurGLPipelineState() override { return m_Ctx.CurGLPipelineState(); }
virtual VKPipe::State &CurVulkanPipelineState() override virtual const VKPipe::State &CurVulkanPipelineState() override
{ {
return m_Ctx.CurVulkanPipelineState(); return m_Ctx.CurVulkanPipelineState();
} }
+4 -4
View File
@@ -515,7 +515,7 @@ You should use :meth:`GetAPIProperties` to determine the API of the capture.
:return: The current D3D11 pipeline state. :return: The current D3D11 pipeline state.
:rtype: D3D11_State :rtype: D3D11_State
)"); )");
virtual D3D11Pipe::State GetD3D11PipelineState() = 0; virtual const D3D11Pipe::State &GetD3D11PipelineState() = 0;
DOCUMENT(R"(Retrieve the current :class:`D3D12_State` pipeline state. DOCUMENT(R"(Retrieve the current :class:`D3D12_State` pipeline state.
@@ -525,7 +525,7 @@ You should use :meth:`GetAPIProperties` to determine the API of the capture.
:return: The current D3D12 pipeline state. :return: The current D3D12 pipeline state.
:rtype: D3D12_State :rtype: D3D12_State
)"); )");
virtual D3D12Pipe::State GetD3D12PipelineState() = 0; virtual const D3D12Pipe::State &GetD3D12PipelineState() = 0;
DOCUMENT(R"(Retrieve the current :class:`GL_State` pipeline state. DOCUMENT(R"(Retrieve the current :class:`GL_State` pipeline state.
@@ -535,7 +535,7 @@ You should use :meth:`GetAPIProperties` to determine the API of the capture.
:return: The current OpenGL pipeline state. :return: The current OpenGL pipeline state.
:rtype: GL_State :rtype: GL_State
)"); )");
virtual GLPipe::State GetGLPipelineState() = 0; virtual const GLPipe::State &GetGLPipelineState() = 0;
DOCUMENT(R"(Retrieve the current :class:`VK_State` pipeline state. DOCUMENT(R"(Retrieve the current :class:`VK_State` pipeline state.
@@ -545,7 +545,7 @@ You should use :meth:`GetAPIProperties` to determine the API of the capture.
:return: The current Vulkan pipeline state. :return: The current Vulkan pipeline state.
:rtype: VK_State :rtype: VK_State
)"); )");
virtual VKPipe::State GetVulkanPipelineState() = 0; virtual const VKPipe::State &GetVulkanPipelineState() = 0;
DOCUMENT(R"(Retrieve the list of possible disassembly targets for :meth:`DisassembleShader`. The DOCUMENT(R"(Retrieve the list of possible disassembly targets for :meth:`DisassembleShader`. The
values are implementation dependent but will always include a default target first which is the values are implementation dependent but will always include a default target first which is the
+7 -4
View File
@@ -146,7 +146,7 @@ public:
// handle a couple of operations ourselves to return a simple fake log // handle a couple of operations ourselves to return a simple fake log
APIProperties GetAPIProperties() { return m_Props; } APIProperties GetAPIProperties() { return m_Props; }
FrameRecord GetFrameRecord() { return m_FrameRecord; } FrameRecord GetFrameRecord() { return m_FrameRecord; }
D3D11Pipe::State GetD3D11PipelineState() { return m_PipelineState; } const D3D11Pipe::State &GetD3D11PipelineState() { return m_PipelineState; }
// other operations are dropped/ignored, to avoid confusion // other operations are dropped/ignored, to avoid confusion
void ReadLogInitialisation() {} void ReadLogInitialisation() {}
void RenderMesh(uint32_t eventID, const vector<MeshFormat> &secondaryDraws, const MeshDisplay &cfg) void RenderMesh(uint32_t eventID, const vector<MeshFormat> &secondaryDraws, const MeshDisplay &cfg)
@@ -161,9 +161,9 @@ public:
return ret; return ret;
} }
void SavePipelineState() {} void SavePipelineState() {}
D3D12Pipe::State GetD3D12PipelineState() { return D3D12Pipe::State(); } const D3D12Pipe::State &GetD3D12PipelineState() { return m_D3D12State; }
GLPipe::State GetGLPipelineState() { return GLPipe::State(); } const GLPipe::State &GetGLPipelineState() { return m_GLState; }
VKPipe::State GetVulkanPipelineState() { return VKPipe::State(); } const VKPipe::State &GetVulkanPipelineState() { return m_VKState; }
void ReplayLog(uint32_t endEventID, ReplayLogType replayType) {} void ReplayLog(uint32_t endEventID, ReplayLogType replayType) {}
vector<uint32_t> GetPassEvents(uint32_t eventID) { return vector<uint32_t>(); } vector<uint32_t> GetPassEvents(uint32_t eventID) { return vector<uint32_t>(); }
vector<EventUsage> GetUsage(ResourceId id) { return vector<EventUsage>(); } vector<EventUsage> GetUsage(ResourceId id) { return vector<EventUsage>(); }
@@ -269,6 +269,9 @@ private:
APIProperties m_Props; APIProperties m_Props;
FrameRecord m_FrameRecord; FrameRecord m_FrameRecord;
D3D11Pipe::State m_PipelineState; D3D11Pipe::State m_PipelineState;
D3D12Pipe::State m_D3D12State;
VKPipe::State m_VKState;
GLPipe::State m_GLState;
IReplayDriver *m_Proxy; IReplayDriver *m_Proxy;
string m_Filename; string m_Filename;
ResourceId m_TextureID; ResourceId m_TextureID;
+45
View File
@@ -2443,6 +2443,51 @@ void ReplayProxy::SavePipelineState()
m_FromReplaySerialiser->Serialise("", m_D3D12PipelineState); m_FromReplaySerialiser->Serialise("", m_D3D12PipelineState);
m_FromReplaySerialiser->Serialise("", m_GLPipelineState); m_FromReplaySerialiser->Serialise("", m_GLPipelineState);
m_FromReplaySerialiser->Serialise("", m_VulkanPipelineState); m_FromReplaySerialiser->Serialise("", m_VulkanPipelineState);
{
D3D11Pipe::Shader *stages[] = {
&m_D3D11PipelineState.m_VS, &m_D3D11PipelineState.m_HS, &m_D3D11PipelineState.m_DS,
&m_D3D11PipelineState.m_GS, &m_D3D11PipelineState.m_PS, &m_D3D11PipelineState.m_CS,
};
for(int i = 0; i < 6; i++)
if(stages[i]->Object != ResourceId())
stages[i]->ShaderDetails = GetShader(GetLiveID(stages[i]->Object), "");
}
{
D3D12Pipe::Shader *stages[] = {
&m_D3D12PipelineState.m_VS, &m_D3D12PipelineState.m_HS, &m_D3D12PipelineState.m_DS,
&m_D3D12PipelineState.m_GS, &m_D3D12PipelineState.m_PS, &m_D3D12PipelineState.m_CS,
};
for(int i = 0; i < 6; i++)
if(stages[i]->Object != ResourceId())
stages[i]->ShaderDetails = GetShader(GetLiveID(stages[i]->Object), "");
}
{
GLPipe::Shader *stages[] = {
&m_GLPipelineState.m_VS, &m_GLPipelineState.m_TCS, &m_GLPipelineState.m_TES,
&m_GLPipelineState.m_GS, &m_GLPipelineState.m_FS, &m_GLPipelineState.m_CS,
};
for(int i = 0; i < 6; i++)
if(stages[i]->Object != ResourceId())
stages[i]->ShaderDetails = GetShader(GetLiveID(stages[i]->Object), "");
}
{
VKPipe::Shader *stages[] = {
&m_VulkanPipelineState.m_VS, &m_VulkanPipelineState.m_TCS, &m_VulkanPipelineState.m_TES,
&m_VulkanPipelineState.m_GS, &m_VulkanPipelineState.m_FS, &m_VulkanPipelineState.m_CS,
};
for(int i = 0; i < 6; i++)
if(stages[i]->Object != ResourceId())
stages[i]->ShaderDetails =
GetShader(GetLiveID(stages[i]->Object), stages[i]->entryPoint.elems);
}
} }
void ReplayProxy::ReplayLog(uint32_t endEventID, ReplayLogType replayType) void ReplayProxy::ReplayLog(uint32_t endEventID, ReplayLogType replayType)
+4 -4
View File
@@ -401,10 +401,10 @@ public:
vector<DebugMessage> GetDebugMessages(); vector<DebugMessage> GetDebugMessages();
void SavePipelineState(); void SavePipelineState();
D3D11Pipe::State GetD3D11PipelineState() { return m_D3D11PipelineState; } const D3D11Pipe::State &GetD3D11PipelineState() { return m_D3D11PipelineState; }
D3D12Pipe::State GetD3D12PipelineState() { return m_D3D12PipelineState; } const D3D12Pipe::State &GetD3D12PipelineState() { return m_D3D12PipelineState; }
GLPipe::State GetGLPipelineState() { return m_GLPipelineState; } const GLPipe::State &GetGLPipelineState() { return m_GLPipelineState; }
VKPipe::State GetVulkanPipelineState() { return m_VulkanPipelineState; } const VKPipe::State &GetVulkanPipelineState() { return m_VulkanPipelineState; }
void ReplayLog(uint32_t endEventID, ReplayLogType replayType); void ReplayLog(uint32_t endEventID, ReplayLogType replayType);
vector<uint32_t> GetPassEvents(uint32_t eventID); vector<uint32_t> GetPassEvents(uint32_t eventID);
+3 -5
View File
@@ -491,11 +491,11 @@ vector<ResourceId> D3D11Replay::GetTextures()
return ret; return ret;
} }
D3D11Pipe::State D3D11Replay::MakePipelineState() void D3D11Replay::SavePipelineState()
{ {
D3D11RenderState *rs = m_pDevice->GetImmediateContext()->GetCurrentPipelineState(); D3D11RenderState *rs = m_pDevice->GetImmediateContext()->GetCurrentPipelineState();
D3D11Pipe::State ret; D3D11Pipe::State &ret = m_CurPipelineState;
///////////////////////////////////////////////// /////////////////////////////////////////////////
// Input Assembler // Input Assembler
@@ -584,7 +584,7 @@ D3D11Pipe::State D3D11Replay::MakePipelineState()
refl = shad->GetDetails(); refl = shad->GetDetails();
dst.Object = rm->GetOriginalID(id); dst.Object = rm->GetOriginalID(id);
dst.ShaderDetails = NULL; dst.ShaderDetails = refl;
string str = GetDebugName(src.Shader); string str = GetDebugName(src.Shader);
dst.customName = true; dst.customName = true;
@@ -1340,8 +1340,6 @@ D3D11Pipe::State D3D11Replay::MakePipelineState()
ret.m_OM.m_State.m_BackFace.FailOp = StencilOp::Keep; ret.m_OM.m_State.m_BackFace.FailOp = StencilOp::Keep;
} }
} }
return ret;
} }
void D3D11Replay::ReadLogInitialisation() void D3D11Replay::ReadLogInitialisation()
+8 -7
View File
@@ -65,11 +65,11 @@ public:
FrameRecord GetFrameRecord(); FrameRecord GetFrameRecord();
void SavePipelineState() { m_CurPipelineState = MakePipelineState(); } void SavePipelineState();
D3D11Pipe::State GetD3D11PipelineState() { return m_CurPipelineState; } const D3D11Pipe::State &GetD3D11PipelineState() { return m_CurPipelineState; }
D3D12Pipe::State GetD3D12PipelineState() { return D3D12Pipe::State(); } const D3D12Pipe::State &GetD3D12PipelineState() { return m_D3D12State; }
GLPipe::State GetGLPipelineState() { return GLPipe::State(); } const GLPipe::State &GetGLPipelineState() { return m_GLState; }
VKPipe::State GetVulkanPipelineState() { return VKPipe::State(); } const VKPipe::State &GetVulkanPipelineState() { return m_VKState; }
void FreeTargetResource(ResourceId id); void FreeTargetResource(ResourceId id);
void FreeCustomShader(ResourceId id); void FreeCustomShader(ResourceId id);
@@ -170,8 +170,6 @@ public:
Callstack::StackResolver *GetCallstackResolver(); Callstack::StackResolver *GetCallstackResolver();
private: private:
D3D11Pipe::State MakePipelineState();
bool m_WARP; bool m_WARP;
bool m_Proxy; bool m_Proxy;
@@ -180,4 +178,7 @@ private:
WrappedID3D11Device *m_pDevice; WrappedID3D11Device *m_pDevice;
D3D11Pipe::State m_CurPipelineState; D3D11Pipe::State m_CurPipelineState;
D3D12Pipe::State m_D3D12State;
VKPipe::State m_VKState;
GLPipe::State m_GLState;
}; };
+3 -1
View File
@@ -889,7 +889,7 @@ void D3D12Replay::FillRegisterSpaces(const D3D12RenderState::RootSignature &root
SAFE_DELETE_ARRAY(spaces); SAFE_DELETE_ARRAY(spaces);
} }
void D3D12Replay::MakePipelineState() void D3D12Replay::SavePipelineState()
{ {
const D3D12RenderState &rs = m_pDevice->GetQueue()->GetCommandData()->m_RenderState; const D3D12RenderState &rs = m_pDevice->GetQueue()->GetCommandData()->m_RenderState;
@@ -979,6 +979,7 @@ void D3D12Replay::MakePipelineState()
state.m_CS.Object = sh->GetResourceID(); state.m_CS.Object = sh->GetResourceID();
state.m_CS.stage = ShaderStage::Compute; state.m_CS.stage = ShaderStage::Compute;
state.m_CS.ShaderDetails = &sh->GetDetails();
state.m_CS.BindpointMapping = sh->GetMapping(); state.m_CS.BindpointMapping = sh->GetMapping();
state.rootSig = rm->GetOriginalID(rs.compute.rootsig); state.rootSig = rm->GetOriginalID(rs.compute.rootsig);
@@ -1010,6 +1011,7 @@ void D3D12Replay::MakePipelineState()
{ {
dst.Object = sh->GetResourceID(); dst.Object = sh->GetResourceID();
dst.BindpointMapping = sh->GetMapping(); dst.BindpointMapping = sh->GetMapping();
dst.ShaderDetails = &sh->GetDetails();
} }
if(rs.graphics.rootsig != ResourceId()) if(rs.graphics.rootsig != ResourceId())
+8 -7
View File
@@ -63,11 +63,11 @@ public:
FrameRecord GetFrameRecord(); FrameRecord GetFrameRecord();
void SavePipelineState() { MakePipelineState(); } void SavePipelineState();
D3D11Pipe::State GetD3D11PipelineState() { return D3D11Pipe::State(); } const D3D11Pipe::State &GetD3D11PipelineState() { return m_D3D11State; }
D3D12Pipe::State GetD3D12PipelineState() { return m_PipelineState; } const D3D12Pipe::State &GetD3D12PipelineState() { return m_PipelineState; }
GLPipe::State GetGLPipelineState() { return GLPipe::State(); } const GLPipe::State &GetGLPipelineState() { return m_GLState; }
VKPipe::State GetVulkanPipelineState() { return VKPipe::State(); } const VKPipe::State &GetVulkanPipelineState() { return m_VKState; }
void FreeTargetResource(ResourceId id); void FreeTargetResource(ResourceId id);
void FreeCustomShader(ResourceId id); void FreeCustomShader(ResourceId id);
@@ -178,8 +178,6 @@ public:
void PreDeviceShutdownCounters(); void PreDeviceShutdownCounters();
private: private:
void MakePipelineState();
void FillRegisterSpaces(const D3D12RenderState::RootSignature &rootSig, void FillRegisterSpaces(const D3D12RenderState::RootSignature &rootSig,
rdctype::array<D3D12Pipe::RegisterSpace> &spaces, rdctype::array<D3D12Pipe::RegisterSpace> &spaces,
D3D12_SHADER_VISIBILITY visibility); D3D12_SHADER_VISIBILITY visibility);
@@ -190,6 +188,9 @@ private:
vector<ID3D12Resource *> m_ProxyResources; vector<ID3D12Resource *> m_ProxyResources;
D3D12Pipe::State m_PipelineState; D3D12Pipe::State m_PipelineState;
D3D11Pipe::State m_D3D11State;
VKPipe::State m_VKState;
GLPipe::State m_GLState;
WrappedID3D12Device *m_pDevice; WrappedID3D12Device *m_pDevice;
}; };
+2 -2
View File
@@ -1105,7 +1105,7 @@ void GLReplay::SavePipelineState()
{ {
curProg = rm->GetCurrentResource(pipeDetails.stagePrograms[i]).name; curProg = rm->GetCurrentResource(pipeDetails.stagePrograms[i]).name;
stages[i]->Object = rm->GetOriginalID(pipeDetails.stageShaders[i]); stages[i]->Object = rm->GetOriginalID(pipeDetails.stageShaders[i]);
refls[i] = GetShader(pipeDetails.stageShaders[i], ""); stages[i]->ShaderDetails = refls[i] = GetShader(pipeDetails.stageShaders[i], "");
GetBindpointMapping(gl.GetHookset(), curProg, (int)i, refls[i], GetBindpointMapping(gl.GetHookset(), curProg, (int)i, refls[i],
stages[i]->BindpointMapping); stages[i]->BindpointMapping);
mappings[i] = &stages[i]->BindpointMapping; mappings[i] = &stages[i]->BindpointMapping;
@@ -1138,7 +1138,7 @@ void GLReplay::SavePipelineState()
stages[i]->customProgramName = (programName != ""); stages[i]->customProgramName = (programName != "");
stages[i]->Object = rm->GetOriginalID(progDetails.stageShaders[i]); stages[i]->Object = rm->GetOriginalID(progDetails.stageShaders[i]);
refls[i] = GetShader(progDetails.stageShaders[i], ""); stages[i]->ShaderDetails = refls[i] = GetShader(progDetails.stageShaders[i], "");
GetBindpointMapping(gl.GetHookset(), curProg, (int)i, refls[i], stages[i]->BindpointMapping); GetBindpointMapping(gl.GetHookset(), curProg, (int)i, refls[i], stages[i]->BindpointMapping);
mappings[i] = &stages[i]->BindpointMapping; mappings[i] = &stages[i]->BindpointMapping;
+7 -4
View File
@@ -111,10 +111,10 @@ public:
FrameRecord GetFrameRecord(); FrameRecord GetFrameRecord();
void SavePipelineState(); void SavePipelineState();
D3D11Pipe::State GetD3D11PipelineState() { return D3D11Pipe::State(); } const D3D11Pipe::State &GetD3D11PipelineState() { return m_D3D11State; }
D3D12Pipe::State GetD3D12PipelineState() { return D3D12Pipe::State(); } const D3D12Pipe::State &GetD3D12PipelineState() { return m_D3D12State; }
GLPipe::State GetGLPipelineState() { return m_CurPipelineState; } const GLPipe::State &GetGLPipelineState() { return m_CurPipelineState; }
VKPipe::State GetVulkanPipelineState() { return VKPipe::State(); } const VKPipe::State &GetVulkanPipelineState() { return m_VKState; }
void FreeTargetResource(ResourceId id); void FreeTargetResource(ResourceId id);
void ReadLogInitialisation(); void ReadLogInitialisation();
@@ -415,6 +415,9 @@ private:
WrappedOpenGL *m_pDriver; WrappedOpenGL *m_pDriver;
GLPipe::State m_CurPipelineState; GLPipe::State m_CurPipelineState;
D3D11Pipe::State m_D3D11State;
D3D12Pipe::State m_D3D12State;
VKPipe::State m_VKState;
}; };
const GLHookSet &GetRealGLFunctions(); const GLHookSet &GetRealGLFunctions();
+4 -2
View File
@@ -2870,7 +2870,6 @@ void VulkanReplay::SavePipelineState()
{ {
stage.Object = rm->GetOriginalID(p.shaders[i].module); stage.Object = rm->GetOriginalID(p.shaders[i].module);
stage.entryPoint = p.shaders[i].entryPoint; stage.entryPoint = p.shaders[i].entryPoint;
stage.ShaderDetails = NULL;
stage.customName = true; stage.customName = true;
stage.name = m_pDriver->m_CreationInfo.m_Names[p.shaders[i].module]; stage.name = m_pDriver->m_CreationInfo.m_Names[p.shaders[i].module];
@@ -2883,6 +2882,8 @@ void VulkanReplay::SavePipelineState()
stage.stage = ShaderStage::Compute; stage.stage = ShaderStage::Compute;
if(p.shaders[i].mapping) if(p.shaders[i].mapping)
stage.BindpointMapping = *p.shaders[i].mapping; stage.BindpointMapping = *p.shaders[i].mapping;
if(p.shaders[i].refl)
stage.ShaderDetails = p.shaders[i].refl;
create_array_uninit(stage.specialization, p.shaders[i].specialization.size()); create_array_uninit(stage.specialization, p.shaders[i].specialization.size());
for(size_t s = 0; s < p.shaders[i].specialization.size(); s++) for(size_t s = 0; s < p.shaders[i].specialization.size(); s++)
@@ -2940,7 +2941,6 @@ void VulkanReplay::SavePipelineState()
{ {
stages[i]->Object = rm->GetOriginalID(p.shaders[i].module); stages[i]->Object = rm->GetOriginalID(p.shaders[i].module);
stages[i]->entryPoint = p.shaders[i].entryPoint; stages[i]->entryPoint = p.shaders[i].entryPoint;
stages[i]->ShaderDetails = NULL;
stages[i]->customName = true; stages[i]->customName = true;
stages[i]->name = m_pDriver->m_CreationInfo.m_Names[p.shaders[i].module]; stages[i]->name = m_pDriver->m_CreationInfo.m_Names[p.shaders[i].module];
@@ -2953,6 +2953,8 @@ void VulkanReplay::SavePipelineState()
stages[i]->stage = StageFromIndex(i); stages[i]->stage = StageFromIndex(i);
if(p.shaders[i].mapping) if(p.shaders[i].mapping)
stages[i]->BindpointMapping = *p.shaders[i].mapping; stages[i]->BindpointMapping = *p.shaders[i].mapping;
if(p.shaders[i].refl)
stages[i]->ShaderDetails = p.shaders[i].refl;
create_array_uninit(stages[i]->specialization, p.shaders[i].specialization.size()); create_array_uninit(stages[i]->specialization, p.shaders[i].specialization.size());
for(size_t s = 0; s < p.shaders[i].specialization.size(); s++) for(size_t s = 0; s < p.shaders[i].specialization.size(); s++)
+7 -4
View File
@@ -153,10 +153,10 @@ public:
vector<DebugMessage> GetDebugMessages(); vector<DebugMessage> GetDebugMessages();
void SavePipelineState(); void SavePipelineState();
D3D11Pipe::State GetD3D11PipelineState() { return D3D11Pipe::State(); } const D3D11Pipe::State &GetD3D11PipelineState() { return m_D3D11State; }
D3D12Pipe::State GetD3D12PipelineState() { return D3D12Pipe::State(); } const D3D12Pipe::State &GetD3D12PipelineState() { return m_D3D12State; }
GLPipe::State GetGLPipelineState() { return GLPipe::State(); } const GLPipe::State &GetGLPipelineState() { return m_GLState; }
VKPipe::State GetVulkanPipelineState() { return m_VulkanPipelineState; } const VKPipe::State &GetVulkanPipelineState() { return m_VulkanPipelineState; }
void FreeTargetResource(ResourceId id); void FreeTargetResource(ResourceId id);
void ReadLogInitialisation(); void ReadLogInitialisation();
@@ -321,6 +321,9 @@ private:
}; };
VKPipe::State m_VulkanPipelineState; VKPipe::State m_VulkanPipelineState;
D3D11Pipe::State m_D3D11State;
D3D12Pipe::State m_D3D12State;
GLPipe::State m_GLState;
map<uint64_t, OutputWindow> m_OutputWindows; map<uint64_t, OutputWindow> m_OutputWindows;
uint64_t m_OutputWinID; uint64_t m_OutputWinID;
+12 -57
View File
@@ -213,24 +213,24 @@ void ReplayController::SetFrameEvent(uint32_t eventID, bool force)
} }
} }
D3D11Pipe::State ReplayController::GetD3D11PipelineState() const D3D11Pipe::State &ReplayController::GetD3D11PipelineState()
{ {
return m_D3D11PipelineState; return *m_D3D11PipelineState;
} }
D3D12Pipe::State ReplayController::GetD3D12PipelineState() const D3D12Pipe::State &ReplayController::GetD3D12PipelineState()
{ {
return m_D3D12PipelineState; return *m_D3D12PipelineState;
} }
GLPipe::State ReplayController::GetGLPipelineState() const GLPipe::State &ReplayController::GetGLPipelineState()
{ {
return m_GLPipelineState; return *m_GLPipelineState;
} }
VKPipe::State ReplayController::GetVulkanPipelineState() const VKPipe::State &ReplayController::GetVulkanPipelineState()
{ {
return m_VulkanPipelineState; return *m_VulkanPipelineState;
} }
rdctype::array<rdctype::str> ReplayController::GetDisassemblyTargets() rdctype::array<rdctype::str> ReplayController::GetDisassemblyTargets()
@@ -1645,53 +1645,8 @@ void ReplayController::FetchPipelineState()
{ {
m_pDevice->SavePipelineState(); m_pDevice->SavePipelineState();
m_D3D11PipelineState = m_pDevice->GetD3D11PipelineState(); m_D3D11PipelineState = &m_pDevice->GetD3D11PipelineState();
m_D3D12PipelineState = m_pDevice->GetD3D12PipelineState(); m_D3D12PipelineState = &m_pDevice->GetD3D12PipelineState();
m_GLPipelineState = m_pDevice->GetGLPipelineState(); m_GLPipelineState = &m_pDevice->GetGLPipelineState();
m_VulkanPipelineState = m_pDevice->GetVulkanPipelineState(); m_VulkanPipelineState = &m_pDevice->GetVulkanPipelineState();
{
D3D11Pipe::Shader *stages[] = {
&m_D3D11PipelineState.m_VS, &m_D3D11PipelineState.m_HS, &m_D3D11PipelineState.m_DS,
&m_D3D11PipelineState.m_GS, &m_D3D11PipelineState.m_PS, &m_D3D11PipelineState.m_CS,
};
for(int i = 0; i < 6; i++)
if(stages[i]->Object != ResourceId())
stages[i]->ShaderDetails = m_pDevice->GetShader(m_pDevice->GetLiveID(stages[i]->Object), "");
}
{
D3D12Pipe::Shader *stages[] = {
&m_D3D12PipelineState.m_VS, &m_D3D12PipelineState.m_HS, &m_D3D12PipelineState.m_DS,
&m_D3D12PipelineState.m_GS, &m_D3D12PipelineState.m_PS, &m_D3D12PipelineState.m_CS,
};
for(int i = 0; i < 6; i++)
if(stages[i]->Object != ResourceId())
stages[i]->ShaderDetails = m_pDevice->GetShader(m_pDevice->GetLiveID(stages[i]->Object), "");
}
{
GLPipe::Shader *stages[] = {
&m_GLPipelineState.m_VS, &m_GLPipelineState.m_TCS, &m_GLPipelineState.m_TES,
&m_GLPipelineState.m_GS, &m_GLPipelineState.m_FS, &m_GLPipelineState.m_CS,
};
for(int i = 0; i < 6; i++)
if(stages[i]->Object != ResourceId())
stages[i]->ShaderDetails = m_pDevice->GetShader(m_pDevice->GetLiveID(stages[i]->Object), "");
}
{
VKPipe::Shader *stages[] = {
&m_VulkanPipelineState.m_VS, &m_VulkanPipelineState.m_TCS, &m_VulkanPipelineState.m_TES,
&m_VulkanPipelineState.m_GS, &m_VulkanPipelineState.m_FS, &m_VulkanPipelineState.m_CS,
};
for(int i = 0; i < 6; i++)
if(stages[i]->Object != ResourceId())
stages[i]->ShaderDetails = m_pDevice->GetShader(m_pDevice->GetLiveID(stages[i]->Object),
stages[i]->entryPoint.elems);
}
} }
+8 -8
View File
@@ -137,10 +137,10 @@ public:
void FetchPipelineState(); void FetchPipelineState();
D3D11Pipe::State GetD3D11PipelineState(); const D3D11Pipe::State &GetD3D11PipelineState();
D3D12Pipe::State GetD3D12PipelineState(); const D3D12Pipe::State &GetD3D12PipelineState();
GLPipe::State GetGLPipelineState(); const GLPipe::State &GetGLPipelineState();
VKPipe::State GetVulkanPipelineState(); const VKPipe::State &GetVulkanPipelineState();
rdctype::array<rdctype::str> GetDisassemblyTargets(); rdctype::array<rdctype::str> GetDisassemblyTargets();
rdctype::str DisassembleShader(const ShaderReflection *refl, const char *target); rdctype::str DisassembleShader(const ShaderReflection *refl, const char *target);
@@ -213,10 +213,10 @@ private:
uint32_t m_EventID; uint32_t m_EventID;
D3D11Pipe::State m_D3D11PipelineState; const D3D11Pipe::State *m_D3D11PipelineState;
D3D12Pipe::State m_D3D12PipelineState; const D3D12Pipe::State *m_D3D12PipelineState;
GLPipe::State m_GLPipelineState; const GLPipe::State *m_GLPipelineState;
VKPipe::State m_VulkanPipelineState; const VKPipe::State *m_VulkanPipelineState;
std::vector<ReplayOutput *> m_Outputs; std::vector<ReplayOutput *> m_Outputs;
+4 -4
View File
@@ -98,10 +98,10 @@ public:
virtual vector<EventUsage> GetUsage(ResourceId id) = 0; virtual vector<EventUsage> GetUsage(ResourceId id) = 0;
virtual void SavePipelineState() = 0; virtual void SavePipelineState() = 0;
virtual D3D11Pipe::State GetD3D11PipelineState() = 0; virtual const D3D11Pipe::State &GetD3D11PipelineState() = 0;
virtual D3D12Pipe::State GetD3D12PipelineState() = 0; virtual const D3D12Pipe::State &GetD3D12PipelineState() = 0;
virtual GLPipe::State GetGLPipelineState() = 0; virtual const GLPipe::State &GetGLPipelineState() = 0;
virtual VKPipe::State GetVulkanPipelineState() = 0; virtual const VKPipe::State &GetVulkanPipelineState() = 0;
virtual FrameRecord GetFrameRecord() = 0; virtual FrameRecord GetFrameRecord() = 0;