From 602511bf331d51e14bb7dcbe92c03c5b51187bf2 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 22 Nov 2017 16:45:50 +0000 Subject: [PATCH] Reduce parameters that need to be passed for viewing shaders --- qrenderdoc/Code/CaptureContext.cpp | 11 ++++------- qrenderdoc/Code/CaptureContext.h | 5 ++--- qrenderdoc/Code/Interface/QRDInterface.h | 10 ++-------- qrenderdoc/Windows/BufferViewer.cpp | 4 ++-- .../PipelineState/D3D11PipelineStateViewer.cpp | 11 +++-------- .../PipelineState/D3D12PipelineStateViewer.cpp | 4 ++-- .../PipelineState/GLPipelineStateViewer.cpp | 3 +-- .../VulkanPipelineStateViewer.cpp | 2 +- qrenderdoc/Windows/PixelHistoryView.cpp | 3 +-- qrenderdoc/Windows/PythonShell.cpp | 12 ++++-------- qrenderdoc/Windows/ShaderViewer.cpp | 6 ++++-- qrenderdoc/Windows/ShaderViewer.h | 16 +++++++--------- qrenderdoc/Windows/TextureViewer.cpp | 4 ++-- renderdoc/api/replay/shader_types.h | 4 ++++ renderdoc/driver/d3d11/d3d11_resources.cpp | 3 --- renderdoc/driver/d3d12/d3d12_resources.cpp | 3 --- .../driver/gl/wrappers/gl_shader_funcs.cpp | 15 +++++++++++++++ renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp | 18 ++++++++++++++++++ .../driver/shaders/spirv/spirv_disassemble.cpp | 2 ++ renderdoc/driver/vulkan/vk_info.cpp | 6 ++---- renderdoc/replay/renderdoc_serialise.inl | 4 +++- 21 files changed, 79 insertions(+), 67 deletions(-) diff --git a/qrenderdoc/Code/CaptureContext.cpp b/qrenderdoc/Code/CaptureContext.cpp index d854889ec..7ab514b79 100644 --- a/qrenderdoc/Code/CaptureContext.cpp +++ b/qrenderdoc/Code/CaptureContext.cpp @@ -1403,18 +1403,15 @@ IShaderViewer *CaptureContext::EditShader(bool customShader, const QString &entr IShaderViewer *CaptureContext::DebugShader(const ShaderBindpointMapping *bind, const ShaderReflection *shader, ResourceId pipeline, - ShaderStage stage, ShaderDebugTrace *trace, - const QString &debugContext) + ShaderDebugTrace *trace, const QString &debugContext) { - return ShaderViewer::DebugShader(*this, bind, shader, pipeline, stage, trace, debugContext, + return ShaderViewer::DebugShader(*this, bind, shader, pipeline, trace, debugContext, m_MainWindow->Widget()); } -IShaderViewer *CaptureContext::ViewShader(const ShaderBindpointMapping *bind, - const ShaderReflection *shader, ResourceId pipeline, - ShaderStage stage) +IShaderViewer *CaptureContext::ViewShader(const ShaderReflection *shader, ResourceId pipeline) { - return ShaderViewer::ViewShader(*this, bind, shader, pipeline, stage, m_MainWindow->Widget()); + return ShaderViewer::ViewShader(*this, shader, pipeline, m_MainWindow->Widget()); } IBufferViewer *CaptureContext::ViewBuffer(uint64_t byteOffset, uint64_t byteSize, ResourceId id, diff --git a/qrenderdoc/Code/CaptureContext.h b/qrenderdoc/Code/CaptureContext.h index 18dd8cf2f..dd0313efc 100644 --- a/qrenderdoc/Code/CaptureContext.h +++ b/qrenderdoc/Code/CaptureContext.h @@ -192,11 +192,10 @@ public: IShaderViewer::CloseCallback closeCallback) override; IShaderViewer *DebugShader(const ShaderBindpointMapping *bind, const ShaderReflection *shader, - ResourceId pipeline, ShaderStage stage, ShaderDebugTrace *trace, + ResourceId pipeline, ShaderDebugTrace *trace, const QString &debugContext) override; - IShaderViewer *ViewShader(const ShaderBindpointMapping *bind, const ShaderReflection *shader, - ResourceId pipeline, ShaderStage stage) override; + IShaderViewer *ViewShader(const ShaderReflection *shader, ResourceId pipeline) override; IBufferViewer *ViewBuffer(uint64_t byteOffset, uint64_t byteSize, ResourceId id, const QString &format = QString()) override; diff --git a/qrenderdoc/Code/Interface/QRDInterface.h b/qrenderdoc/Code/Interface/QRDInterface.h index 0b1869c6f..e14d1a1a0 100644 --- a/qrenderdoc/Code/Interface/QRDInterface.h +++ b/qrenderdoc/Code/Interface/QRDInterface.h @@ -1618,7 +1618,6 @@ through the execution of a given shader. :param ~renderdoc.ShaderReflection shader: The reflection data for the shader to view. :param ~renderdoc.ResourceId pipeline: The pipeline state object, if applicable, that this shader is bound to. -:param ~renderdoc.ShaderStage stage: The stage that the shader is bound to. :param ~renderdoc.ShaderDebugTrace trace: The execution trace of the debugged shader. :param str debugContext: A human-readable context string describing which invocation of this shader was debugged. For example 'Pixel 12,34 at EID 678'. @@ -1627,22 +1626,17 @@ through the execution of a given shader. )"); virtual IShaderViewer *DebugShader(const ShaderBindpointMapping *bind, const ShaderReflection *shader, ResourceId pipeline, - ShaderStage stage, ShaderDebugTrace *trace, - const QString &debugContext) = 0; + ShaderDebugTrace *trace, const QString &debugContext) = 0; DOCUMENT(R"(Show a new :class:`ShaderViewer` window, showing a read-only view of a given shader. -:param ~renderdoc.ShaderBindpointMapping bind: The bindpoint mapping for the shader to view. :param ~renderdoc.ShaderReflection shader: The reflection data for the shader to view. :param ~renderdoc.ResourceId pipeline: The pipeline state object, if applicable, that this shader is bound to. -:param ~renderdoc.ShaderStage stage: The stage that the shader is bound to. :return: The new :class:`ShaderViewer` window opened, but not shown. :rtype: ShaderViewer )"); - virtual IShaderViewer *ViewShader(const ShaderBindpointMapping *bind, - const ShaderReflection *shader, ResourceId pipeline, - ShaderStage stage) = 0; + virtual IShaderViewer *ViewShader(const ShaderReflection *shader, ResourceId pipeline) = 0; DOCUMENT(R"(Show a new :class:`BufferViewer` window, showing a read-only view of buffer data. diff --git a/qrenderdoc/Windows/BufferViewer.cpp b/qrenderdoc/Windows/BufferViewer.cpp index 970dba262..1f8f6d13b 100644 --- a/qrenderdoc/Windows/BufferViewer.cpp +++ b/qrenderdoc/Windows/BufferViewer.cpp @@ -3208,8 +3208,8 @@ void BufferViewer::debugVertex() ResourceId pipeline = m_Ctx.CurPipelineState().GetGraphicsPipelineObject(); // viewer takes ownership of the trace - IShaderViewer *s = m_Ctx.DebugShader(&bindMapping, shaderDetails, pipeline, - ShaderStage::Vertex, trace, debugContext); + IShaderViewer *s = + m_Ctx.DebugShader(&bindMapping, shaderDetails, pipeline, trace, debugContext); m_Ctx.AddDockWindow(s->Widget(), DockReference::AddTo, this); }); diff --git a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp index acc36a5b0..9a156698b 100644 --- a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp @@ -2208,15 +2208,12 @@ void D3D11PipelineStateViewer::vertex_leave(QEvent *e) void D3D11PipelineStateViewer::shaderView_clicked() { - ShaderStage shaderStage = ShaderStage::Vertex; ShaderReflection *shaderDetails = NULL; - const ShaderBindpointMapping *bindMap = NULL; QWidget *sender = qobject_cast(QObject::sender()); if(sender == ui->iaBytecode || sender == ui->iaBytecodeViewButton) { shaderDetails = m_Ctx.CurD3D11PipelineState().m_IA.Bytecode; - bindMap = NULL; } else { @@ -2225,12 +2222,10 @@ void D3D11PipelineStateViewer::shaderView_clicked() if(stage == NULL || stage->Object == ResourceId()) return; - bindMap = &stage->BindpointMapping; shaderDetails = stage->ShaderDetails; - shaderStage = stage->stage; } - IShaderViewer *shad = m_Ctx.ViewShader(bindMap, shaderDetails, ResourceId(), shaderStage); + IShaderViewer *shad = m_Ctx.ViewShader(shaderDetails, ResourceId()); m_Ctx.AddDockWindow(shad->Widget(), DockReference::AddTo, this); } @@ -3130,8 +3125,8 @@ void D3D11PipelineStateViewer::on_debugThread_clicked() m_Ctx.CurPipelineState().GetBindpointMapping(ShaderStage::Compute); // viewer takes ownership of the trace - IShaderViewer *s = m_Ctx.DebugShader(&bindMapping, shaderDetails, ResourceId(), - ShaderStage::Compute, trace, debugContext); + IShaderViewer *s = + m_Ctx.DebugShader(&bindMapping, shaderDetails, ResourceId(), trace, debugContext); m_Ctx.AddDockWindow(s->Widget(), DockReference::AddTo, this); }); diff --git a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp index cf6d1441d..315019e99 100644 --- a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp @@ -2059,8 +2059,8 @@ void D3D12PipelineStateViewer::shaderView_clicked() if(stage == NULL || stage->Object == ResourceId()) return; - IShaderViewer *shad = m_Ctx.ViewShader(&stage->BindpointMapping, stage->ShaderDetails, - m_Ctx.CurD3D12PipelineState().pipeline, stage->stage); + IShaderViewer *shad = + m_Ctx.ViewShader(stage->ShaderDetails, m_Ctx.CurD3D12PipelineState().pipeline); m_Ctx.AddDockWindow(shad->Widget(), DockReference::AddTo, this); } diff --git a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp index 950a8c0e0..ecc59989e 100644 --- a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp @@ -2162,8 +2162,7 @@ void GLPipelineStateViewer::shaderView_clicked() ShaderReflection *shaderDetails = stage->ShaderDetails; - IShaderViewer *shad = - m_Ctx.ViewShader(&stage->BindpointMapping, shaderDetails, ResourceId(), stage->stage); + IShaderViewer *shad = m_Ctx.ViewShader(shaderDetails, ResourceId()); m_Ctx.AddDockWindow(shad->Widget(), DockReference::AddTo, this); } diff --git a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp index 6c2a0cacc..2d1f30c6e 100644 --- a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp @@ -2285,7 +2285,7 @@ void VulkanPipelineStateViewer::shaderView_clicked() ? m_Ctx.CurVulkanPipelineState().compute.obj : m_Ctx.CurVulkanPipelineState().graphics.obj; - IShaderViewer *shad = m_Ctx.ViewShader(&stage->BindpointMapping, shaderDetails, pipe, stage->stage); + IShaderViewer *shad = m_Ctx.ViewShader(shaderDetails, pipe); m_Ctx.AddDockWindow(shad->Widget(), DockReference::AddTo, this); } diff --git a/qrenderdoc/Windows/PixelHistoryView.cpp b/qrenderdoc/Windows/PixelHistoryView.cpp index e7ae58acf..d0cf03e50 100644 --- a/qrenderdoc/Windows/PixelHistoryView.cpp +++ b/qrenderdoc/Windows/PixelHistoryView.cpp @@ -702,8 +702,7 @@ void PixelHistoryView::startDebug(EventTag tag) ResourceId pipeline = m_Ctx.CurPipelineState().GetGraphicsPipelineObject(); // viewer takes ownership of the trace - IShaderViewer *s = m_Ctx.DebugShader(&bindMapping, shaderDetails, pipeline, ShaderStage::Pixel, - trace, debugContext); + IShaderViewer *s = m_Ctx.DebugShader(&bindMapping, shaderDetails, pipeline, trace, debugContext); m_Ctx.AddDockWindow(s->Widget(), DockReference::MainToolArea, NULL); }); diff --git a/qrenderdoc/Windows/PythonShell.cpp b/qrenderdoc/Windows/PythonShell.cpp index c7174f278..76f02f61b 100644 --- a/qrenderdoc/Windows/PythonShell.cpp +++ b/qrenderdoc/Windows/PythonShell.cpp @@ -365,19 +365,15 @@ struct CaptureContextInvoker : ICaptureContext virtual IShaderViewer *DebugShader(const ShaderBindpointMapping *bind, const ShaderReflection *shader, ResourceId pipeline, - ShaderStage stage, ShaderDebugTrace *trace, - const QString &debugContext) override + ShaderDebugTrace *trace, const QString &debugContext) override { return InvokeRetFunction(&ICaptureContext::DebugShader, bind, shader, pipeline, - stage, trace, debugContext); + trace, debugContext); } - virtual IShaderViewer *ViewShader(const ShaderBindpointMapping *bind, - const ShaderReflection *shader, ResourceId pipeline, - ShaderStage stage) override + virtual IShaderViewer *ViewShader(const ShaderReflection *shader, ResourceId pipeline) override { - return InvokeRetFunction(&ICaptureContext::ViewShader, bind, shader, pipeline, - stage); + return InvokeRetFunction(&ICaptureContext::ViewShader, shader, pipeline); } virtual IBufferViewer *ViewBuffer(uint64_t byteOffset, uint64_t byteSize, ResourceId id, diff --git a/qrenderdoc/Windows/ShaderViewer.cpp b/qrenderdoc/Windows/ShaderViewer.cpp index 937525cde..42b0a6a0b 100644 --- a/qrenderdoc/Windows/ShaderViewer.cpp +++ b/qrenderdoc/Windows/ShaderViewer.cpp @@ -282,14 +282,14 @@ void ShaderViewer::editShader(bool customShader, const QString &entryPoint, cons } void ShaderViewer::debugShader(const ShaderBindpointMapping *bind, const ShaderReflection *shader, - ResourceId pipeline, ShaderStage stage, ShaderDebugTrace *trace, + ResourceId pipeline, ShaderDebugTrace *trace, const QString &debugContext) { m_Mapping = bind; m_ShaderDetails = shader; m_Pipeline = pipeline; m_Trace = trace; - m_Stage = stage; + m_Stage = ShaderStage::Vertex; m_DebugContext = debugContext; // no replacing allowed, stay in find mode @@ -301,6 +301,8 @@ void ShaderViewer::debugShader(const ShaderBindpointMapping *bind, const ShaderR if(shader) { + m_Stage = shader->Stage; + m_Ctx.Replay().AsyncInvoke([this](IReplayController *r) { rdcarray targets = r->GetDisassemblyTargets(); diff --git a/qrenderdoc/Windows/ShaderViewer.h b/qrenderdoc/Windows/ShaderViewer.h index 23710c4c4..740719c35 100644 --- a/qrenderdoc/Windows/ShaderViewer.h +++ b/qrenderdoc/Windows/ShaderViewer.h @@ -72,19 +72,18 @@ public: static IShaderViewer *DebugShader(ICaptureContext &ctx, const ShaderBindpointMapping *bind, const ShaderReflection *shader, ResourceId pipeline, - ShaderStage stage, ShaderDebugTrace *trace, - const QString &debugContext, QWidget *parent) + ShaderDebugTrace *trace, const QString &debugContext, + QWidget *parent) { ShaderViewer *ret = new ShaderViewer(ctx, parent); - ret->debugShader(bind, shader, pipeline, stage, trace, debugContext); + ret->debugShader(bind, shader, pipeline, trace, debugContext); return ret; } - static IShaderViewer *ViewShader(ICaptureContext &ctx, const ShaderBindpointMapping *bind, - const ShaderReflection *shader, ResourceId pipeline, - ShaderStage stage, QWidget *parent) + static IShaderViewer *ViewShader(ICaptureContext &ctx, const ShaderReflection *shader, + ResourceId pipeline, QWidget *parent) { - return DebugShader(ctx, bind, shader, pipeline, stage, NULL, QString(), parent); + return DebugShader(ctx, NULL, shader, pipeline, NULL, QString(), parent); } ~ShaderViewer(); @@ -149,8 +148,7 @@ private: explicit ShaderViewer(ICaptureContext &ctx, QWidget *parent = 0); void editShader(bool customShader, const QString &entryPoint, const QStringMap &files); void debugShader(const ShaderBindpointMapping *bind, const ShaderReflection *shader, - ResourceId pipeline, ShaderStage stage, ShaderDebugTrace *trace, - const QString &debugContext); + ResourceId pipeline, ShaderDebugTrace *trace, const QString &debugContext); bool eventFilter(QObject *watched, QEvent *event) override; const rdcarray *GetVariableList(VariableCategory varCat, int arrayIdx); diff --git a/qrenderdoc/Windows/TextureViewer.cpp b/qrenderdoc/Windows/TextureViewer.cpp index dd5109d47..480b1b566 100644 --- a/qrenderdoc/Windows/TextureViewer.cpp +++ b/qrenderdoc/Windows/TextureViewer.cpp @@ -3403,8 +3403,8 @@ void TextureViewer::on_debugPixelContext_clicked() ResourceId pipeline = m_Ctx.CurPipelineState().GetGraphicsPipelineObject(); // viewer takes ownership of the trace - IShaderViewer *s = m_Ctx.DebugShader(&bindMapping, shaderDetails, pipeline, - ShaderStage::Pixel, trace, debugContext); + IShaderViewer *s = + m_Ctx.DebugShader(&bindMapping, shaderDetails, pipeline, trace, debugContext); m_Ctx.AddDockWindow(s->Widget(), DockReference::AddTo, this); }); diff --git a/renderdoc/api/replay/shader_types.h b/renderdoc/api/replay/shader_types.h index 3b26801d1..5ba86f601 100644 --- a/renderdoc/api/replay/shader_types.h +++ b/renderdoc/api/replay/shader_types.h @@ -521,6 +521,10 @@ struct ShaderReflection DOCUMENT("The entry point in the shader for this reflection, if multiple entry points exist."); rdcstr EntryPoint; + DOCUMENT( + "The :class:`ShaderStage` that this shader corresponds to, if multiple entry points exist."); + ShaderStage Stage; + DOCUMENT( "A :class:`ShaderDebugChunk` containing any embedded debugging information in this shader."); ShaderDebugChunk DebugInfo; diff --git a/renderdoc/driver/d3d11/d3d11_resources.cpp b/renderdoc/driver/d3d11/d3d11_resources.cpp index a36655675..393b61162 100644 --- a/renderdoc/driver/d3d11/d3d11_resources.cpp +++ b/renderdoc/driver/d3d11/d3d11_resources.cpp @@ -185,9 +185,6 @@ void WrappedShader::ShaderEntry::BuildReflection() MakeShaderReflection(m_DXBCFile, &m_Details, &m_Mapping); m_Details.ID = m_ID; - m_Details.EntryPoint = m_DXBCFile->m_DebugInfo ? m_DXBCFile->m_DebugInfo->GetEntryFunction() : ""; - if(m_Details.EntryPoint.empty()) - m_Details.EntryPoint = "main"; } UINT GetMipForSubresource(ID3D11Resource *res, int Subresource) diff --git a/renderdoc/driver/d3d12/d3d12_resources.cpp b/renderdoc/driver/d3d12/d3d12_resources.cpp index 9295fc0c6..c83357722 100644 --- a/renderdoc/driver/d3d12/d3d12_resources.cpp +++ b/renderdoc/driver/d3d12/d3d12_resources.cpp @@ -492,7 +492,4 @@ void WrappedID3D12PipelineState::ShaderEntry::BuildReflection() MakeShaderReflection(m_DXBCFile, &m_Details, &m_Mapping); m_Details.ID = GetResourceID(); - m_Details.EntryPoint = m_DXBCFile->m_DebugInfo ? m_DXBCFile->m_DebugInfo->GetEntryFunction() : ""; - if(m_Details.EntryPoint.empty()) - m_Details.EntryPoint = "main"; } diff --git a/renderdoc/driver/gl/wrappers/gl_shader_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_shader_funcs.cpp index 6a1e0e3be..5cfcfa9cb 100644 --- a/renderdoc/driver/gl/wrappers/gl_shader_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_shader_funcs.cpp @@ -117,6 +117,21 @@ void WrappedOpenGL::ShaderData::Compile(WrappedOpenGL &gl, ResourceId id, GLuint reflection.ID = id; reflection.EntryPoint = "main"; + switch(settings.stage) + { + case SPIRVShaderStage::Vertex: reflection.Stage = ShaderStage::Vertex; break; + case SPIRVShaderStage::TessControl: reflection.Stage = ShaderStage::Tess_Control; break; + case SPIRVShaderStage::TessEvaluation: reflection.Stage = ShaderStage::Tess_Eval; break; + case SPIRVShaderStage::Geometry: reflection.Stage = ShaderStage::Geometry; break; + case SPIRVShaderStage::Fragment: reflection.Stage = ShaderStage::Fragment; break; + case SPIRVShaderStage::Compute: reflection.Stage = ShaderStage::Compute; break; + case SPIRVShaderStage::Invalid: + default: + RDCERR("Unexpected shader stage %u", settings.stage); + reflection.Stage = ShaderStage::Vertex; + break; + } + // TODO sort these so that the first file contains the entry point reflection.DebugInfo.files.resize(sources.size()); for(size_t i = 0; i < sources.size(); i++) diff --git a/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp b/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp index d446a1db1..90146d204 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp +++ b/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp @@ -206,8 +206,26 @@ void MakeShaderReflection(DXBC::DXBCFile *dxbc, ShaderReflection *refl, if(dxbc == NULL || !RenderDoc::Inst().IsReplayApp()) return; + switch(dxbc->m_Type) + { + case D3D11_ShaderType_Pixel: refl->Stage = ShaderStage::Pixel; break; + case D3D11_ShaderType_Vertex: refl->Stage = ShaderStage::Vertex; break; + case D3D11_ShaderType_Geometry: refl->Stage = ShaderStage::Geometry; break; + case D3D11_ShaderType_Hull: refl->Stage = ShaderStage::Hull; break; + case D3D11_ShaderType_Domain: refl->Stage = ShaderStage::Domain; break; + case D3D11_ShaderType_Compute: refl->Stage = ShaderStage::Compute; break; + default: + RDCERR("Unexpected DXBC shader type %u", dxbc->m_Type); + refl->Stage = ShaderStage::Vertex; + break; + } + + refl->EntryPoint = "main"; + if(dxbc->m_DebugInfo) { + refl->EntryPoint = dxbc->m_DebugInfo->GetEntryFunction(); + refl->DebugInfo.compileFlags = DXBC::EncodeFlags(dxbc->m_DebugInfo); refl->DebugInfo.files.resize(dxbc->m_DebugInfo->Files.size()); diff --git a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp index cf02aad0e..f2bcac7da 100644 --- a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp @@ -3910,6 +3910,8 @@ void SPVModule::MakeReflection(ShaderStage stage, const string &entryPoint, vector samplers, roresources, rwresources; // VKTODOLOW filter to only functions/resources used by entryPoint + reflection.EntryPoint = entryPoint; + reflection.Stage = stage; // TODO sort these so that the entry point is in the first file if(!sourceFiles.empty()) diff --git a/renderdoc/driver/vulkan/vk_info.cpp b/renderdoc/driver/vulkan/vk_info.cpp index 89ae29a62..d07b394c9 100644 --- a/renderdoc/driver/vulkan/vk_info.cpp +++ b/renderdoc/driver/vulkan/vk_info.cpp @@ -141,13 +141,12 @@ void VulkanCreationInfo::Pipeline::Init(VulkanResourceManager *resourceMan, Vulk if(reflData.entryPoint.empty()) { SPVModule &spv = info.m_ShaderModule[id].spirv; - spv.MakeReflection(ShaderStage(reflData.stage), reflData.entryPoint, reflData.refl, + spv.MakeReflection(ShaderStage(reflData.stage), shad.entryPoint, reflData.refl, reflData.mapping, reflData.patchData); reflData.entryPoint = shad.entryPoint; reflData.stage = stageIndex; reflData.refl.ID = resourceMan->GetOriginalID(id); - reflData.refl.EntryPoint = shad.entryPoint; if(!spv.spirv.empty()) { @@ -369,10 +368,9 @@ void VulkanCreationInfo::Pipeline::Init(VulkanResourceManager *resourceMan, Vulk reflData.entryPoint = shad.entryPoint; reflData.stage = StageIndex(pCreateInfo->stage.stage); SPVModule &spv = info.m_ShaderModule[id].spirv; - spv.MakeReflection(ShaderStage::Compute, reflData.entryPoint, reflData.refl, reflData.mapping, + spv.MakeReflection(ShaderStage::Compute, shad.entryPoint, reflData.refl, reflData.mapping, reflData.patchData); reflData.refl.ID = resourceMan->GetOriginalID(id); - reflData.refl.EntryPoint = shad.entryPoint; if(!spv.spirv.empty()) { diff --git a/renderdoc/replay/renderdoc_serialise.inl b/renderdoc/replay/renderdoc_serialise.inl index 18c0c1484..d10bc5b15 100644 --- a/renderdoc/replay/renderdoc_serialise.inl +++ b/renderdoc/replay/renderdoc_serialise.inl @@ -265,6 +265,8 @@ void DoSerialise(SerialiserType &ser, ShaderReflection &el) SERIALISE_MEMBER(ID); SERIALISE_MEMBER(EntryPoint); + SERIALISE_MEMBER(Stage); + SERIALISE_MEMBER(DebugInfo); SERIALISE_MEMBER(DispatchThreadsDimension); @@ -283,7 +285,7 @@ void DoSerialise(SerialiserType &ser, ShaderReflection &el) SERIALISE_MEMBER(Interfaces); - SIZE_CHECK(200); + SIZE_CHECK(208); } template