diff --git a/renderdoc/driver/vulkan/vk_replay.cpp b/renderdoc/driver/vulkan/vk_replay.cpp index 0177ca4a4..dd92b33c1 100644 --- a/renderdoc/driver/vulkan/vk_replay.cpp +++ b/renderdoc/driver/vulkan/vk_replay.cpp @@ -2720,7 +2720,39 @@ void VulkanReplay::SavePipelineState() m_VulkanPipelineState.graphics.obj = rm->GetOriginalID(state.graphics.pipeline); if(state.compute.pipeline != ResourceId()) - m_VulkanPipelineState.compute.flags = c.m_Pipeline[state.compute.pipeline].flags; + { + const VulkanCreationInfo::Pipeline &p = c.m_Pipeline[state.compute.pipeline]; + + m_VulkanPipelineState.compute.flags = p.flags; + + VulkanPipelineState::ShaderStage &stage = m_VulkanPipelineState.CS; + + int i=5; // 5 is the CS idx (VS, TCS, TES, GS, FS, CS) + { + stage.Shader = rm->GetOriginalID(p.shaders[i].module); + stage.entryPoint = p.shaders[i].entryPoint; + stage.ShaderDetails = NULL; + + stage.customName = true; + stage.ShaderName = m_pDriver->m_CreationInfo.m_Names[p.shaders[i].module]; + if(stage.ShaderName.count == 0) + { + stage.customName = false; + stage.ShaderName = StringFormat::Fmt("Shader %llu", stage.Shader); + } + + stage.stage = eShaderStage_Compute; + if(p.shaders[i].mapping) + stage.BindpointMapping = *p.shaders[i].mapping; + + create_array_uninit(stage.specialization, p.shaders[i].specialization.size()); + for(size_t s=0; s < p.shaders[i].specialization.size(); s++) + { + stage.specialization[s].specID = p.shaders[i].specialization[s].specID; + create_array_init(stage.specialization[s].data, p.shaders[i].specialization[s].size, p.shaders[i].specialization[s].data); + } + } + } if(state.graphics.pipeline != ResourceId()) { @@ -2765,7 +2797,6 @@ void VulkanReplay::SavePipelineState() &m_VulkanPipelineState.TES, &m_VulkanPipelineState.GS, &m_VulkanPipelineState.FS, - &m_VulkanPipelineState.CS, }; for(size_t i=0; i < ARRAY_COUNT(stages); i++) diff --git a/renderdoc/driver/vulkan/wrappers/vk_draw_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_draw_funcs.cpp index 6b82041f9..c5ae5d242 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_draw_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_draw_funcs.cpp @@ -1201,6 +1201,26 @@ bool WrappedVulkan::Serialise_vkCmdDispatch( commandBuffer = GetResourceManager()->GetLiveHandle(cmdid); ObjDisp(commandBuffer)->CmdDispatch(Unwrap(commandBuffer), X, Y, Z); + + const string desc = localSerialiser->GetDebugStr(); + + { + AddEvent(DISPATCH, desc); + string name = "vkCmdDispatch(" + + ToStr::Get(X) + "," + + ToStr::Get(Y) + "," + + ToStr::Get(Z) + ")"; + + FetchDrawcall draw; + draw.name = name; + draw.dispatchDimension[0] = X; + draw.dispatchDimension[1] = Y; + draw.dispatchDimension[2] = Z; + + draw.flags |= eDraw_Dispatch; + + AddDrawcall(draw, true); + } } return true; diff --git a/renderdocui/Windows/PipelineState/VulkanPipelineStateViewer.Designer.cs b/renderdocui/Windows/PipelineState/VulkanPipelineStateViewer.Designer.cs index 657ccb8f1..9d4eabb31 100644 --- a/renderdocui/Windows/PipelineState/VulkanPipelineStateViewer.Designer.cs +++ b/renderdocui/Windows/PipelineState/VulkanPipelineStateViewer.Designer.cs @@ -3265,7 +3265,7 @@ this.csResources.Size = new System.Drawing.Size(1070, 195); this.csResources.TabIndex = 1; this.csResources.Text = "Outputs"; - this.csResources.TreeColumn = 7; + this.csResources.TreeColumn = 8; this.csResources.ViewOptions.Indent = 0; this.csResources.ViewOptions.ShowLine = false; this.csResources.ViewOptions.PadForPlusMinus = false; @@ -3325,7 +3325,7 @@ this.csCBuffers.Size = new System.Drawing.Size(1070, 195); this.csCBuffers.TabIndex = 11; this.csCBuffers.Text = "Constant Buffers"; - this.csCBuffers.TreeColumn = 5; + this.csCBuffers.TreeColumn = 6; this.csCBuffers.ViewOptions.Indent = 0; this.csCBuffers.ViewOptions.PadForPlusMinus = false; this.csCBuffers.ViewOptions.ShowLine = false;