diff --git a/qrenderdoc/Code/CaptureContext.cpp b/qrenderdoc/Code/CaptureContext.cpp index c27974d93..924de9966 100644 --- a/qrenderdoc/Code/CaptureContext.cpp +++ b/qrenderdoc/Code/CaptureContext.cpp @@ -263,12 +263,12 @@ void CaptureContext::LoadLogfileThreaded(const QString &logFile, const QString & m_PostloadProgress = 0.9f; - m_CurD3D11PipelineState = r->GetD3D11PipelineState(); - m_CurD3D12PipelineState = r->GetD3D12PipelineState(); - m_CurGLPipelineState = r->GetGLPipelineState(); - m_CurVulkanPipelineState = r->GetVulkanPipelineState(); - m_CurPipelineState.SetStates(m_APIProps, &m_CurD3D11PipelineState, &m_CurD3D12PipelineState, - &m_CurGLPipelineState, &m_CurVulkanPipelineState); + m_CurD3D11PipelineState = &r->GetD3D11PipelineState(); + m_CurD3D12PipelineState = &r->GetD3D12PipelineState(); + m_CurGLPipelineState = &r->GetGLPipelineState(); + m_CurVulkanPipelineState = &r->GetVulkanPipelineState(); + m_CurPipelineState.SetStates(m_APIProps, m_CurD3D11PipelineState, m_CurD3D12PipelineState, + m_CurGLPipelineState, m_CurVulkanPipelineState); m_UnreadMessageCount = 0; AddMessages(m_FrameInfo.debugMessages); @@ -534,11 +534,12 @@ void CaptureContext::CloseLogfile() m_Drawcalls.clear(); m_FirstDrawcall = m_LastDrawcall = NULL; - m_CurD3D11PipelineState = D3D11Pipe::State(); - m_CurD3D12PipelineState = D3D12Pipe::State(); - m_CurGLPipelineState = GLPipe::State(); - m_CurVulkanPipelineState = VKPipe::State(); - m_CurPipelineState.SetStates(m_APIProps, NULL, NULL, NULL, NULL); + m_CurD3D11PipelineState = NULL; + m_CurD3D12PipelineState = NULL; + m_CurGLPipelineState = NULL; + m_CurVulkanPipelineState = NULL; + m_CurPipelineState.SetStates(m_APIProps, m_CurD3D11PipelineState, m_CurD3D12PipelineState, + m_CurGLPipelineState, m_CurVulkanPipelineState); m_DebugMessages.clear(); m_UnreadMessageCount = 0; @@ -564,12 +565,12 @@ void CaptureContext::SetEventID(const QVector &exclude, uint32_t s m_Renderer.BlockInvoke([this, eventID, force](IReplayController *r) { r->SetFrameEvent(eventID, force); - m_CurD3D11PipelineState = r->GetD3D11PipelineState(); - m_CurD3D12PipelineState = r->GetD3D12PipelineState(); - m_CurGLPipelineState = r->GetGLPipelineState(); - m_CurVulkanPipelineState = r->GetVulkanPipelineState(); - m_CurPipelineState.SetStates(m_APIProps, &m_CurD3D11PipelineState, &m_CurD3D12PipelineState, - &m_CurGLPipelineState, &m_CurVulkanPipelineState); + m_CurD3D11PipelineState = &r->GetD3D11PipelineState(); + m_CurD3D12PipelineState = &r->GetD3D12PipelineState(); + m_CurGLPipelineState = &r->GetGLPipelineState(); + m_CurVulkanPipelineState = &r->GetVulkanPipelineState(); + m_CurPipelineState.SetStates(m_APIProps, m_CurD3D11PipelineState, m_CurD3D12PipelineState, + m_CurGLPipelineState, m_CurVulkanPipelineState); }); for(ILogViewer *logviewer : m_LogViewers) diff --git a/qrenderdoc/Code/CaptureContext.h b/qrenderdoc/Code/CaptureContext.h index cbf485207..2a3d4d023 100644 --- a/qrenderdoc/Code/CaptureContext.h +++ b/qrenderdoc/Code/CaptureContext.h @@ -186,19 +186,19 @@ public: void AddDockWindow(QWidget *newWindow, DockReference ref, QWidget *refWindow, float percentage = 0.5f) override; - D3D11Pipe::State &CurD3D11PipelineState() override { return m_CurD3D11PipelineState; } - D3D12Pipe::State &CurD3D12PipelineState() override { return m_CurD3D12PipelineState; } - GLPipe::State &CurGLPipelineState() override { return m_CurGLPipelineState; } - VKPipe::State &CurVulkanPipelineState() override { return m_CurVulkanPipelineState; } + const D3D11Pipe::State &CurD3D11PipelineState() override { return *m_CurD3D11PipelineState; } + const D3D12Pipe::State &CurD3D12PipelineState() override { return *m_CurD3D12PipelineState; } + const GLPipe::State &CurGLPipelineState() override { return *m_CurGLPipelineState; } + const VKPipe::State &CurVulkanPipelineState() override { return *m_CurVulkanPipelineState; } CommonPipelineState &CurPipelineState() override { return m_CurPipelineState; } PersistantConfig &Config() override { return m_Config; } private: ReplayManager m_Renderer; - D3D11Pipe::State m_CurD3D11PipelineState; - D3D12Pipe::State m_CurD3D12PipelineState; - GLPipe::State m_CurGLPipelineState; - VKPipe::State m_CurVulkanPipelineState; + const D3D11Pipe::State *m_CurD3D11PipelineState; + const D3D12Pipe::State *m_CurD3D12PipelineState; + const GLPipe::State *m_CurGLPipelineState; + const VKPipe::State *m_CurVulkanPipelineState; CommonPipelineState m_CurPipelineState; PersistantConfig &m_Config; diff --git a/qrenderdoc/Code/Interface/CommonPipelineState.cpp b/qrenderdoc/Code/Interface/CommonPipelineState.cpp index a8f2cfb74..06e3d4500 100644 --- a/qrenderdoc/Code/Interface/CommonPipelineState.cpp +++ b/qrenderdoc/Code/Interface/CommonPipelineState.cpp @@ -928,7 +928,7 @@ BoundCBuffer CommonPipelineState::GetConstantBuffer(ShaderStage stage, uint32_t s.BindpointMapping.ConstantBlocks[s.ShaderDetails->ConstantBlocks[BufIdx].bindPoint].bind; 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; ByteOffset = b.Offset; @@ -939,7 +939,8 @@ BoundCBuffer CommonPipelineState::GetConstantBuffer(ShaderStage stage, uint32_t } 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); if(s.ShaderDetails != NULL && BufIdx < (uint32_t)s.ShaderDetails->ConstantBlocks.count) diff --git a/qrenderdoc/Code/Interface/CommonPipelineState.h b/qrenderdoc/Code/Interface/CommonPipelineState.h index 1ff3f4154..ab2f4ea15 100644 --- a/qrenderdoc/Code/Interface/CommonPipelineState.h +++ b/qrenderdoc/Code/Interface/CommonPipelineState.h @@ -145,8 +145,8 @@ public: :param ~renderdoc.GL_State gl: The OpenGL state. :param ~renderdoc.VK_State vk: The Vulkan state. )"); - void SetStates(APIProperties props, D3D11Pipe::State *d3d11, D3D12Pipe::State *d3d12, - GLPipe::State *gl, VKPipe::State *vk) + void SetStates(APIProperties props, const D3D11Pipe::State *d3d11, const D3D12Pipe::State *d3d12, + const GLPipe::State *gl, const VKPipe::State *vk) { m_APIProps = props; m_D3D11 = d3d11; @@ -422,10 +422,10 @@ Typically this is ``glsl`` or ``hlsl``. QVector GetOutputTargets(); private: - D3D11Pipe::State *m_D3D11 = NULL; - D3D12Pipe::State *m_D3D12 = NULL; - GLPipe::State *m_GL = NULL; - VKPipe::State *m_Vulkan = NULL; + const D3D11Pipe::State *m_D3D11 = NULL; + const D3D12Pipe::State *m_D3D12 = NULL; + const GLPipe::State *m_GL = NULL; + const VKPipe::State *m_Vulkan = NULL; APIProperties m_APIProps; const D3D11Pipe::Shader &GetD3D11Stage(ShaderStage stage); diff --git a/qrenderdoc/Code/Interface/QRDInterface.h b/qrenderdoc/Code/Interface/QRDInterface.h index ff5a5e5dd..22bf31aa0 100644 --- a/qrenderdoc/Code/Interface/QRDInterface.h +++ b/qrenderdoc/Code/Interface/QRDInterface.h @@ -1386,28 +1386,28 @@ currently docked. :return: The current D3D11 pipeline 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. :return: The current D3D12 pipeline 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. :return: The current OpenGL pipeline 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. :return: The current Vulkan pipeline 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. diff --git a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp index 3ca30f2c1..253a62b6d 100644 --- a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp @@ -2261,7 +2261,7 @@ void D3D11PipelineStateViewer::shaderSave_clicked() m_Common.SaveShaderFile(shaderDetails); } -QVariantList D3D11PipelineStateViewer::exportViewHTML(D3D11Pipe::View &view, int i, +QVariantList D3D11PipelineStateViewer::exportViewHTML(const D3D11Pipe::View &view, int i, ShaderReflection *refl, const QString &extraParams) { @@ -2385,7 +2385,7 @@ QVariantList D3D11PipelineStateViewer::exportViewHTML(D3D11Pipe::View &view, int 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")); @@ -2483,7 +2483,7 @@ void D3D11PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, D3D11Pipe::IA & 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; @@ -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")); @@ -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")); @@ -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")); diff --git a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.h b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.h index a3dca6ded..c3b9464f3 100644 --- a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.h +++ b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.h @@ -93,13 +93,13 @@ private: void setState(); void clearState(); - QVariantList exportViewHTML(D3D11Pipe::View &view, int i, ShaderReflection *refl, + QVariantList exportViewHTML(const D3D11Pipe::View &view, int i, ShaderReflection *refl, const QString &extraParams); - void exportHTML(QXmlStreamWriter &xml, D3D11Pipe::IA &ia); - void exportHTML(QXmlStreamWriter &xml, D3D11Pipe::Shader &sh); - void exportHTML(QXmlStreamWriter &xml, D3D11Pipe::SO &so); - void exportHTML(QXmlStreamWriter &xml, D3D11Pipe::Rasterizer &rs); - void exportHTML(QXmlStreamWriter &xml, D3D11Pipe::OM &om); + void exportHTML(QXmlStreamWriter &xml, const D3D11Pipe::IA &ia); + void exportHTML(QXmlStreamWriter &xml, const D3D11Pipe::Shader &sh); + void exportHTML(QXmlStreamWriter &xml, const D3D11Pipe::SO &so); + void exportHTML(QXmlStreamWriter &xml, const D3D11Pipe::Rasterizer &rs); + void exportHTML(QXmlStreamWriter &xml, const D3D11Pipe::OM &om); void setInactiveRow(RDTreeWidgetItem *node); void setEmptyRow(RDTreeWidgetItem *node); diff --git a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp index 52c4378a5..3bad1e496 100644 --- a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp @@ -2254,7 +2254,7 @@ QVariantList D3D12PipelineStateViewer::exportViewHTML(const D3D12Pipe::View &vie 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")); @@ -2356,7 +2356,7 @@ void D3D12PipelineStateViewer::exportHTML(QXmlStreamWriter &xml, D3D12Pipe::IA & 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; @@ -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")); @@ -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")); @@ -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")); diff --git a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.h b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.h index e1f50740e..bf3f76a7f 100644 --- a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.h +++ b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.h @@ -109,11 +109,11 @@ private: QVariantList exportViewHTML(const D3D12Pipe::View &view, bool rw, const ShaderResource *shaderInput, const QString &extraParams); - void exportHTML(QXmlStreamWriter &xml, D3D12Pipe::IA &ia); - void exportHTML(QXmlStreamWriter &xml, D3D12Pipe::Shader &sh); - void exportHTML(QXmlStreamWriter &xml, D3D12Pipe::Streamout &so); - void exportHTML(QXmlStreamWriter &xml, D3D12Pipe::Rasterizer &rs); - void exportHTML(QXmlStreamWriter &xml, D3D12Pipe::OM &om); + void exportHTML(QXmlStreamWriter &xml, const D3D12Pipe::IA &ia); + void exportHTML(QXmlStreamWriter &xml, const D3D12Pipe::Shader &sh); + void exportHTML(QXmlStreamWriter &xml, const D3D12Pipe::Streamout &so); + void exportHTML(QXmlStreamWriter &xml, const D3D12Pipe::Rasterizer &rs); + 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) QList m_VBNodes; diff --git a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp index 469d78cb0..589ed325e 100644 --- a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp @@ -2264,7 +2264,7 @@ void GLPipelineStateViewer::shaderSave_clicked() 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(); { @@ -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(); 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(); { @@ -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(); 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(); { diff --git a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.h b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.h index e75fe8cc7..743c894b0 100644 --- a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.h +++ b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.h @@ -107,11 +107,11 @@ private: bool showNode(bool usedSlot, bool filledSlot); - void exportHTML(QXmlStreamWriter &xml, GLPipe::VertexInput &vtx); - void exportHTML(QXmlStreamWriter &xml, GLPipe::Shader &sh); - void exportHTML(QXmlStreamWriter &xml, GLPipe::Feedback &xfb); - void exportHTML(QXmlStreamWriter &xml, GLPipe::Rasterizer &rs); - void exportHTML(QXmlStreamWriter &xml, GLPipe::FrameBuffer &fb); + void exportHTML(QXmlStreamWriter &xml, const GLPipe::VertexInput &vtx); + void exportHTML(QXmlStreamWriter &xml, const GLPipe::Shader &sh); + void exportHTML(QXmlStreamWriter &xml, const GLPipe::Feedback &xfb); + void exportHTML(QXmlStreamWriter &xml, const GLPipe::Rasterizer &rs); + 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) QList m_VBNodes; diff --git a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp index b3117e2dc..15e6ed857 100644 --- a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp @@ -2403,7 +2403,7 @@ void VulkanPipelineStateViewer::shaderSave_clicked() 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")); @@ -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")); @@ -2507,7 +2507,7 @@ void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, VKPipe::InputA {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; @@ -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")); @@ -2889,7 +2889,7 @@ void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, VKPipe::Raster 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")); @@ -2903,7 +2903,7 @@ void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, VKPipe::Raster 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")); @@ -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.writeCharacters(tr("Color Blend State")); @@ -2998,7 +2998,7 @@ void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, VKPipe::ColorB rows); } -void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, VKPipe::DepthStencil &ds) +void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const VKPipe::DepthStencil &ds) { { 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")); diff --git a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.h b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.h index 18b6e3615..764f123bc 100644 --- a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.h +++ b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.h @@ -118,13 +118,13 @@ private: bool showNode(bool usedSlot, bool filledSlot); - void exportHTML(QXmlStreamWriter &xml, VKPipe::VertexInput &vi); - void exportHTML(QXmlStreamWriter &xml, VKPipe::InputAssembly &ia); - void exportHTML(QXmlStreamWriter &xml, VKPipe::Shader &sh); - void exportHTML(QXmlStreamWriter &xml, VKPipe::Raster &rs); - void exportHTML(QXmlStreamWriter &xml, VKPipe::ColorBlend &cb); - void exportHTML(QXmlStreamWriter &xml, VKPipe::DepthStencil &ds); - void exportHTML(QXmlStreamWriter &xml, VKPipe::CurrentPass &pass); + void exportHTML(QXmlStreamWriter &xml, const VKPipe::VertexInput &vi); + void exportHTML(QXmlStreamWriter &xml, const VKPipe::InputAssembly &ia); + void exportHTML(QXmlStreamWriter &xml, const VKPipe::Shader &sh); + void exportHTML(QXmlStreamWriter &xml, const VKPipe::Raster &rs); + void exportHTML(QXmlStreamWriter &xml, const VKPipe::ColorBlend &cb); + void exportHTML(QXmlStreamWriter &xml, const VKPipe::DepthStencil &ds); + 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) QList m_VBNodes; diff --git a/qrenderdoc/Windows/PythonShell.cpp b/qrenderdoc/Windows/PythonShell.cpp index cf7f74df0..7ca6d70ff 100644 --- a/qrenderdoc/Windows/PythonShell.cpp +++ b/qrenderdoc/Windows/PythonShell.cpp @@ -99,16 +99,16 @@ struct CaptureContextInvoker : ICaptureContext virtual const QVector &DebugMessages() override { return m_Ctx.DebugMessages(); } virtual int UnreadMessageCount() override { return m_Ctx.UnreadMessageCount(); } virtual void MarkMessagesRead() override { return m_Ctx.MarkMessagesRead(); } - virtual D3D11Pipe::State &CurD3D11PipelineState() override + virtual const D3D11Pipe::State &CurD3D11PipelineState() override { return m_Ctx.CurD3D11PipelineState(); } - virtual D3D12Pipe::State &CurD3D12PipelineState() override + virtual const D3D12Pipe::State &CurD3D12PipelineState() override { return m_Ctx.CurD3D12PipelineState(); } - virtual GLPipe::State &CurGLPipelineState() override { return m_Ctx.CurGLPipelineState(); } - virtual VKPipe::State &CurVulkanPipelineState() override + virtual const GLPipe::State &CurGLPipelineState() override { return m_Ctx.CurGLPipelineState(); } + virtual const VKPipe::State &CurVulkanPipelineState() override { return m_Ctx.CurVulkanPipelineState(); } diff --git a/renderdoc/api/replay/renderdoc_replay.h b/renderdoc/api/replay/renderdoc_replay.h index 29697ec30..0cea8812d 100644 --- a/renderdoc/api/replay/renderdoc_replay.h +++ b/renderdoc/api/replay/renderdoc_replay.h @@ -515,7 +515,7 @@ You should use :meth:`GetAPIProperties` to determine the API of the capture. :return: The current D3D11 pipeline 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. @@ -525,7 +525,7 @@ You should use :meth:`GetAPIProperties` to determine the API of the capture. :return: The current D3D12 pipeline 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. @@ -535,7 +535,7 @@ You should use :meth:`GetAPIProperties` to determine the API of the capture. :return: The current OpenGL pipeline 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. @@ -545,7 +545,7 @@ You should use :meth:`GetAPIProperties` to determine the API of the capture. :return: The current Vulkan pipeline 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 values are implementation dependent but will always include a default target first which is the diff --git a/renderdoc/core/image_viewer.cpp b/renderdoc/core/image_viewer.cpp index 9a11f5576..b23589a67 100644 --- a/renderdoc/core/image_viewer.cpp +++ b/renderdoc/core/image_viewer.cpp @@ -146,7 +146,7 @@ public: // handle a couple of operations ourselves to return a simple fake log APIProperties GetAPIProperties() { return m_Props; } 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 void ReadLogInitialisation() {} void RenderMesh(uint32_t eventID, const vector &secondaryDraws, const MeshDisplay &cfg) @@ -161,9 +161,9 @@ public: return ret; } void SavePipelineState() {} - D3D12Pipe::State GetD3D12PipelineState() { return D3D12Pipe::State(); } - GLPipe::State GetGLPipelineState() { return GLPipe::State(); } - VKPipe::State GetVulkanPipelineState() { return VKPipe::State(); } + const D3D12Pipe::State &GetD3D12PipelineState() { return m_D3D12State; } + const GLPipe::State &GetGLPipelineState() { return m_GLState; } + const VKPipe::State &GetVulkanPipelineState() { return m_VKState; } void ReplayLog(uint32_t endEventID, ReplayLogType replayType) {} vector GetPassEvents(uint32_t eventID) { return vector(); } vector GetUsage(ResourceId id) { return vector(); } @@ -269,6 +269,9 @@ private: APIProperties m_Props; FrameRecord m_FrameRecord; D3D11Pipe::State m_PipelineState; + D3D12Pipe::State m_D3D12State; + VKPipe::State m_VKState; + GLPipe::State m_GLState; IReplayDriver *m_Proxy; string m_Filename; ResourceId m_TextureID; diff --git a/renderdoc/core/replay_proxy.cpp b/renderdoc/core/replay_proxy.cpp index b556dc834..d96d03e9a 100644 --- a/renderdoc/core/replay_proxy.cpp +++ b/renderdoc/core/replay_proxy.cpp @@ -2443,6 +2443,51 @@ void ReplayProxy::SavePipelineState() m_FromReplaySerialiser->Serialise("", m_D3D12PipelineState); m_FromReplaySerialiser->Serialise("", m_GLPipelineState); 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) diff --git a/renderdoc/core/replay_proxy.h b/renderdoc/core/replay_proxy.h index 8eacf7c48..3be0bc1b9 100644 --- a/renderdoc/core/replay_proxy.h +++ b/renderdoc/core/replay_proxy.h @@ -401,10 +401,10 @@ public: vector GetDebugMessages(); void SavePipelineState(); - D3D11Pipe::State GetD3D11PipelineState() { return m_D3D11PipelineState; } - D3D12Pipe::State GetD3D12PipelineState() { return m_D3D12PipelineState; } - GLPipe::State GetGLPipelineState() { return m_GLPipelineState; } - VKPipe::State GetVulkanPipelineState() { return m_VulkanPipelineState; } + const D3D11Pipe::State &GetD3D11PipelineState() { return m_D3D11PipelineState; } + const D3D12Pipe::State &GetD3D12PipelineState() { return m_D3D12PipelineState; } + const GLPipe::State &GetGLPipelineState() { return m_GLPipelineState; } + const VKPipe::State &GetVulkanPipelineState() { return m_VulkanPipelineState; } void ReplayLog(uint32_t endEventID, ReplayLogType replayType); vector GetPassEvents(uint32_t eventID); diff --git a/renderdoc/driver/d3d11/d3d11_replay.cpp b/renderdoc/driver/d3d11/d3d11_replay.cpp index 72541e66d..8595bea4c 100644 --- a/renderdoc/driver/d3d11/d3d11_replay.cpp +++ b/renderdoc/driver/d3d11/d3d11_replay.cpp @@ -491,11 +491,11 @@ vector D3D11Replay::GetTextures() return ret; } -D3D11Pipe::State D3D11Replay::MakePipelineState() +void D3D11Replay::SavePipelineState() { D3D11RenderState *rs = m_pDevice->GetImmediateContext()->GetCurrentPipelineState(); - D3D11Pipe::State ret; + D3D11Pipe::State &ret = m_CurPipelineState; ///////////////////////////////////////////////// // Input Assembler @@ -584,7 +584,7 @@ D3D11Pipe::State D3D11Replay::MakePipelineState() refl = shad->GetDetails(); dst.Object = rm->GetOriginalID(id); - dst.ShaderDetails = NULL; + dst.ShaderDetails = refl; string str = GetDebugName(src.Shader); dst.customName = true; @@ -1340,8 +1340,6 @@ D3D11Pipe::State D3D11Replay::MakePipelineState() ret.m_OM.m_State.m_BackFace.FailOp = StencilOp::Keep; } } - - return ret; } void D3D11Replay::ReadLogInitialisation() diff --git a/renderdoc/driver/d3d11/d3d11_replay.h b/renderdoc/driver/d3d11/d3d11_replay.h index c1ac79264..c88ebdb16 100644 --- a/renderdoc/driver/d3d11/d3d11_replay.h +++ b/renderdoc/driver/d3d11/d3d11_replay.h @@ -65,11 +65,11 @@ public: FrameRecord GetFrameRecord(); - void SavePipelineState() { m_CurPipelineState = MakePipelineState(); } - D3D11Pipe::State GetD3D11PipelineState() { return m_CurPipelineState; } - D3D12Pipe::State GetD3D12PipelineState() { return D3D12Pipe::State(); } - GLPipe::State GetGLPipelineState() { return GLPipe::State(); } - VKPipe::State GetVulkanPipelineState() { return VKPipe::State(); } + void SavePipelineState(); + const D3D11Pipe::State &GetD3D11PipelineState() { return m_CurPipelineState; } + const D3D12Pipe::State &GetD3D12PipelineState() { return m_D3D12State; } + const GLPipe::State &GetGLPipelineState() { return m_GLState; } + const VKPipe::State &GetVulkanPipelineState() { return m_VKState; } void FreeTargetResource(ResourceId id); void FreeCustomShader(ResourceId id); @@ -170,8 +170,6 @@ public: Callstack::StackResolver *GetCallstackResolver(); private: - D3D11Pipe::State MakePipelineState(); - bool m_WARP; bool m_Proxy; @@ -180,4 +178,7 @@ private: WrappedID3D11Device *m_pDevice; D3D11Pipe::State m_CurPipelineState; + D3D12Pipe::State m_D3D12State; + VKPipe::State m_VKState; + GLPipe::State m_GLState; }; diff --git a/renderdoc/driver/d3d12/d3d12_replay.cpp b/renderdoc/driver/d3d12/d3d12_replay.cpp index 2e4044e5b..cbdf4575e 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.cpp +++ b/renderdoc/driver/d3d12/d3d12_replay.cpp @@ -889,7 +889,7 @@ void D3D12Replay::FillRegisterSpaces(const D3D12RenderState::RootSignature &root SAFE_DELETE_ARRAY(spaces); } -void D3D12Replay::MakePipelineState() +void D3D12Replay::SavePipelineState() { 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.stage = ShaderStage::Compute; + state.m_CS.ShaderDetails = &sh->GetDetails(); state.m_CS.BindpointMapping = sh->GetMapping(); state.rootSig = rm->GetOriginalID(rs.compute.rootsig); @@ -1010,6 +1011,7 @@ void D3D12Replay::MakePipelineState() { dst.Object = sh->GetResourceID(); dst.BindpointMapping = sh->GetMapping(); + dst.ShaderDetails = &sh->GetDetails(); } if(rs.graphics.rootsig != ResourceId()) diff --git a/renderdoc/driver/d3d12/d3d12_replay.h b/renderdoc/driver/d3d12/d3d12_replay.h index ab1c993bf..259fcefbd 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.h +++ b/renderdoc/driver/d3d12/d3d12_replay.h @@ -63,11 +63,11 @@ public: FrameRecord GetFrameRecord(); - void SavePipelineState() { MakePipelineState(); } - D3D11Pipe::State GetD3D11PipelineState() { return D3D11Pipe::State(); } - D3D12Pipe::State GetD3D12PipelineState() { return m_PipelineState; } - GLPipe::State GetGLPipelineState() { return GLPipe::State(); } - VKPipe::State GetVulkanPipelineState() { return VKPipe::State(); } + void SavePipelineState(); + const D3D11Pipe::State &GetD3D11PipelineState() { return m_D3D11State; } + const D3D12Pipe::State &GetD3D12PipelineState() { return m_PipelineState; } + const GLPipe::State &GetGLPipelineState() { return m_GLState; } + const VKPipe::State &GetVulkanPipelineState() { return m_VKState; } void FreeTargetResource(ResourceId id); void FreeCustomShader(ResourceId id); @@ -178,8 +178,6 @@ public: void PreDeviceShutdownCounters(); private: - void MakePipelineState(); - void FillRegisterSpaces(const D3D12RenderState::RootSignature &rootSig, rdctype::array &spaces, D3D12_SHADER_VISIBILITY visibility); @@ -190,6 +188,9 @@ private: vector m_ProxyResources; D3D12Pipe::State m_PipelineState; + D3D11Pipe::State m_D3D11State; + VKPipe::State m_VKState; + GLPipe::State m_GLState; WrappedID3D12Device *m_pDevice; }; diff --git a/renderdoc/driver/gl/gl_replay.cpp b/renderdoc/driver/gl/gl_replay.cpp index a833b23f2..13fcd0cae 100644 --- a/renderdoc/driver/gl/gl_replay.cpp +++ b/renderdoc/driver/gl/gl_replay.cpp @@ -1105,7 +1105,7 @@ void GLReplay::SavePipelineState() { curProg = rm->GetCurrentResource(pipeDetails.stagePrograms[i]).name; 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], stages[i]->BindpointMapping); mappings[i] = &stages[i]->BindpointMapping; @@ -1138,7 +1138,7 @@ void GLReplay::SavePipelineState() stages[i]->customProgramName = (programName != ""); 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); mappings[i] = &stages[i]->BindpointMapping; diff --git a/renderdoc/driver/gl/gl_replay.h b/renderdoc/driver/gl/gl_replay.h index 78ea2a4e2..18ed05704 100644 --- a/renderdoc/driver/gl/gl_replay.h +++ b/renderdoc/driver/gl/gl_replay.h @@ -111,10 +111,10 @@ public: FrameRecord GetFrameRecord(); void SavePipelineState(); - D3D11Pipe::State GetD3D11PipelineState() { return D3D11Pipe::State(); } - D3D12Pipe::State GetD3D12PipelineState() { return D3D12Pipe::State(); } - GLPipe::State GetGLPipelineState() { return m_CurPipelineState; } - VKPipe::State GetVulkanPipelineState() { return VKPipe::State(); } + const D3D11Pipe::State &GetD3D11PipelineState() { return m_D3D11State; } + const D3D12Pipe::State &GetD3D12PipelineState() { return m_D3D12State; } + const GLPipe::State &GetGLPipelineState() { return m_CurPipelineState; } + const VKPipe::State &GetVulkanPipelineState() { return m_VKState; } void FreeTargetResource(ResourceId id); void ReadLogInitialisation(); @@ -415,6 +415,9 @@ private: WrappedOpenGL *m_pDriver; GLPipe::State m_CurPipelineState; + D3D11Pipe::State m_D3D11State; + D3D12Pipe::State m_D3D12State; + VKPipe::State m_VKState; }; const GLHookSet &GetRealGLFunctions(); diff --git a/renderdoc/driver/vulkan/vk_replay.cpp b/renderdoc/driver/vulkan/vk_replay.cpp index fed463d8f..b0671cfbe 100644 --- a/renderdoc/driver/vulkan/vk_replay.cpp +++ b/renderdoc/driver/vulkan/vk_replay.cpp @@ -2870,7 +2870,6 @@ void VulkanReplay::SavePipelineState() { stage.Object = rm->GetOriginalID(p.shaders[i].module); stage.entryPoint = p.shaders[i].entryPoint; - stage.ShaderDetails = NULL; stage.customName = true; stage.name = m_pDriver->m_CreationInfo.m_Names[p.shaders[i].module]; @@ -2883,6 +2882,8 @@ void VulkanReplay::SavePipelineState() stage.stage = ShaderStage::Compute; if(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()); 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]->entryPoint = p.shaders[i].entryPoint; - stages[i]->ShaderDetails = NULL; stages[i]->customName = true; 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); if(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()); for(size_t s = 0; s < p.shaders[i].specialization.size(); s++) diff --git a/renderdoc/driver/vulkan/vk_replay.h b/renderdoc/driver/vulkan/vk_replay.h index cd8a928d2..f6f47d142 100644 --- a/renderdoc/driver/vulkan/vk_replay.h +++ b/renderdoc/driver/vulkan/vk_replay.h @@ -153,10 +153,10 @@ public: vector GetDebugMessages(); void SavePipelineState(); - D3D11Pipe::State GetD3D11PipelineState() { return D3D11Pipe::State(); } - D3D12Pipe::State GetD3D12PipelineState() { return D3D12Pipe::State(); } - GLPipe::State GetGLPipelineState() { return GLPipe::State(); } - VKPipe::State GetVulkanPipelineState() { return m_VulkanPipelineState; } + const D3D11Pipe::State &GetD3D11PipelineState() { return m_D3D11State; } + const D3D12Pipe::State &GetD3D12PipelineState() { return m_D3D12State; } + const GLPipe::State &GetGLPipelineState() { return m_GLState; } + const VKPipe::State &GetVulkanPipelineState() { return m_VulkanPipelineState; } void FreeTargetResource(ResourceId id); void ReadLogInitialisation(); @@ -321,6 +321,9 @@ private: }; VKPipe::State m_VulkanPipelineState; + D3D11Pipe::State m_D3D11State; + D3D12Pipe::State m_D3D12State; + GLPipe::State m_GLState; map m_OutputWindows; uint64_t m_OutputWinID; diff --git a/renderdoc/replay/replay_controller.cpp b/renderdoc/replay/replay_controller.cpp index efee9e255..6e4d92b75 100644 --- a/renderdoc/replay/replay_controller.cpp +++ b/renderdoc/replay/replay_controller.cpp @@ -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 ReplayController::GetDisassemblyTargets() @@ -1645,53 +1645,8 @@ void ReplayController::FetchPipelineState() { m_pDevice->SavePipelineState(); - m_D3D11PipelineState = m_pDevice->GetD3D11PipelineState(); - m_D3D12PipelineState = m_pDevice->GetD3D12PipelineState(); - m_GLPipelineState = m_pDevice->GetGLPipelineState(); - 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); - } + m_D3D11PipelineState = &m_pDevice->GetD3D11PipelineState(); + m_D3D12PipelineState = &m_pDevice->GetD3D12PipelineState(); + m_GLPipelineState = &m_pDevice->GetGLPipelineState(); + m_VulkanPipelineState = &m_pDevice->GetVulkanPipelineState(); } diff --git a/renderdoc/replay/replay_controller.h b/renderdoc/replay/replay_controller.h index b77bf592a..1b7ae3c77 100644 --- a/renderdoc/replay/replay_controller.h +++ b/renderdoc/replay/replay_controller.h @@ -137,10 +137,10 @@ public: void FetchPipelineState(); - D3D11Pipe::State GetD3D11PipelineState(); - D3D12Pipe::State GetD3D12PipelineState(); - GLPipe::State GetGLPipelineState(); - VKPipe::State GetVulkanPipelineState(); + const D3D11Pipe::State &GetD3D11PipelineState(); + const D3D12Pipe::State &GetD3D12PipelineState(); + const GLPipe::State &GetGLPipelineState(); + const VKPipe::State &GetVulkanPipelineState(); rdctype::array GetDisassemblyTargets(); rdctype::str DisassembleShader(const ShaderReflection *refl, const char *target); @@ -213,10 +213,10 @@ private: uint32_t m_EventID; - D3D11Pipe::State m_D3D11PipelineState; - D3D12Pipe::State m_D3D12PipelineState; - GLPipe::State m_GLPipelineState; - VKPipe::State m_VulkanPipelineState; + const D3D11Pipe::State *m_D3D11PipelineState; + const D3D12Pipe::State *m_D3D12PipelineState; + const GLPipe::State *m_GLPipelineState; + const VKPipe::State *m_VulkanPipelineState; std::vector m_Outputs; diff --git a/renderdoc/replay/replay_driver.h b/renderdoc/replay/replay_driver.h index e93140717..208101f7f 100644 --- a/renderdoc/replay/replay_driver.h +++ b/renderdoc/replay/replay_driver.h @@ -98,10 +98,10 @@ public: virtual vector GetUsage(ResourceId id) = 0; virtual void SavePipelineState() = 0; - virtual D3D11Pipe::State GetD3D11PipelineState() = 0; - virtual D3D12Pipe::State GetD3D12PipelineState() = 0; - virtual GLPipe::State GetGLPipelineState() = 0; - virtual VKPipe::State GetVulkanPipelineState() = 0; + virtual const D3D11Pipe::State &GetD3D11PipelineState() = 0; + virtual const D3D12Pipe::State &GetD3D12PipelineState() = 0; + virtual const GLPipe::State &GetGLPipelineState() = 0; + virtual const VKPipe::State &GetVulkanPipelineState() = 0; virtual FrameRecord GetFrameRecord() = 0;