diff --git a/.gitignore b/.gitignore index 6bcdb4da7..6ffb22260 100644 --- a/.gitignore +++ b/.gitignore @@ -30,5 +30,5 @@ obj/ symsrv.yes ipch/ *.shfbproj_* - +renderdoc/driver/vulkan/renderdoc_capture.json renderdocui/3rdparty/ironpython/pythonlibs.zip diff --git a/qrenderdoc/Windows/EventBrowser.cpp b/qrenderdoc/Windows/EventBrowser.cpp index de615c69a..1825d5dac 100644 --- a/qrenderdoc/Windows/EventBrowser.cpp +++ b/qrenderdoc/Windows/EventBrowser.cpp @@ -182,7 +182,7 @@ void EventBrowser::on_timeDraws_clicked() uint32_t counters[] = { eCounter_EventGPUDuration }; rdctype::array results; - r->FetchCounters(m_Core->CurFrame(), 0, ~0U, counters, 1, &results); + r->FetchCounters(m_Core->CurFrame(), counters, 1, &results); GUIInvoke::blockcall([this, results]() { SetDrawcallTimes(ui->events->topLevelItem(0), results); diff --git a/renderdoc/Makefile b/renderdoc/Makefile index 667c2a564..fc7ffac55 100644 --- a/renderdoc/Makefile +++ b/renderdoc/Makefile @@ -78,6 +78,8 @@ data/spv/minmaxresult.compo \ data/spv/outline.frago \ data/spv/debuguniforms.ho \ data/spv/texsample.ho \ +data/spv/quadwrite.frago \ +data/spv/quadresolve.frago \ data/sourcecodepro.ttfo .PHONY: all diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index d6ee5f30c..b45d29794 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -237,7 +237,7 @@ void VkInitParams::Set(const VkInstanceCreateInfo* pCreateInfo, ResourceId inst) } WrappedVulkan::WrappedVulkan(const char *logFilename) - : m_RenderState(m_CreationInfo) + : m_RenderState(&m_CreationInfo) { #if defined(RELEASE) const bool debugSerialiser = false; @@ -1813,7 +1813,7 @@ void WrappedVulkan::ReplayLog(uint32_t frameID, uint32_t startEventID, uint32_t RDCASSERT(m_PartialReplayData.resultPartialCmdBuffer == VK_NULL_HANDLE); m_PartialReplayData.partialParent = ResourceId(); m_PartialReplayData.baseEvent = 0; - m_RenderState = VulkanRenderState(m_CreationInfo); + m_RenderState = VulkanRenderState(&m_CreationInfo); m_RenderState.m_ResourceManager = GetResourceManager(); } diff --git a/renderdoc/driver/vulkan/vk_debug.cpp b/renderdoc/driver/vulkan/vk_debug.cpp index 8e9bf713b..47f0b4f0c 100644 --- a/renderdoc/driver/vulkan/vk_debug.cpp +++ b/renderdoc/driver/vulkan/vk_debug.cpp @@ -2135,7 +2135,7 @@ struct QuadOverdrawCallback : public DrawcallCallback , m_pDebug(vk->GetDebugManager()) , m_FrameID(frameID) , m_Events(events) - , m_PrevState(VulkanCreationInfo()) + , m_PrevState(NULL) { m_pDriver->SetDrawcallCB(this); } ~QuadOverdrawCallback() { m_pDriver->SetDrawcallCB(NULL); } @@ -2160,7 +2160,7 @@ struct QuadOverdrawCallback : public DrawcallCallback // if we don't get a hit, create a modified pipeline if(pipe == VK_NULL_HANDLE) { - VulkanCreationInfo &c = pipestate.m_CreationInfo; + VulkanCreationInfo &c = *pipestate.m_CreationInfo; VulkanCreationInfo::Pipeline &p = c.m_Pipeline[pipestate.graphics.pipeline]; diff --git a/renderdoc/driver/vulkan/vk_state.cpp b/renderdoc/driver/vulkan/vk_state.cpp index 9b2e8ece0..9435b422e 100644 --- a/renderdoc/driver/vulkan/vk_state.cpp +++ b/renderdoc/driver/vulkan/vk_state.cpp @@ -26,7 +26,7 @@ #include "vk_info.h" #include "vk_resources.h" -VulkanRenderState::VulkanRenderState(VulkanCreationInfo &createInfo) +VulkanRenderState::VulkanRenderState(VulkanCreationInfo *createInfo) : m_CreationInfo(createInfo) { compute.pipeline = graphics.pipeline = renderPass = framebuffer = ResourceId(); @@ -95,14 +95,14 @@ void VulkanRenderState::BeginRenderPassAndApplyState(VkCommandBuffer cmd) VkClearValue empty[16] = {0}; - RDCASSERT(ARRAY_COUNT(empty) >= m_CreationInfo.m_RenderPass[renderPass].attachments.size()); + RDCASSERT(ARRAY_COUNT(empty) >= m_CreationInfo->m_RenderPass[renderPass].attachments.size()); VkRenderPassBeginInfo rpbegin = { VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, NULL, - Unwrap(m_CreationInfo.m_RenderPass[renderPass].loadRP), + Unwrap(m_CreationInfo->m_RenderPass[renderPass].loadRP), Unwrap(GetResourceManager()->GetCurrentHandle(framebuffer)), renderArea, - (uint32_t)m_CreationInfo.m_RenderPass[renderPass].attachments.size(), empty, + (uint32_t)m_CreationInfo->m_RenderPass[renderPass].attachments.size(), empty, }; ObjDisp(cmd)->CmdBeginRenderPass(Unwrap(cmd), &rpbegin, VK_SUBPASS_CONTENTS_INLINE); @@ -142,21 +142,21 @@ void VulkanRenderState::BindPipeline(VkCommandBuffer cmd) { ObjDisp(cmd)->CmdBindPipeline(Unwrap(cmd), VK_PIPELINE_BIND_POINT_GRAPHICS, Unwrap(GetResourceManager()->GetCurrentHandle(graphics.pipeline))); - ResourceId pipeLayoutId = m_CreationInfo.m_Pipeline[graphics.pipeline].layout; + ResourceId pipeLayoutId = m_CreationInfo->m_Pipeline[graphics.pipeline].layout; VkPipelineLayout layout = GetResourceManager()->GetCurrentHandle(pipeLayoutId); - const vector &pushRanges = m_CreationInfo.m_PipelineLayout[pipeLayoutId].pushRanges; + const vector &pushRanges = m_CreationInfo->m_PipelineLayout[pipeLayoutId].pushRanges; // only set push constant ranges that the layout uses for(size_t i=0; i < pushRanges.size(); i++) ObjDisp(cmd)->CmdPushConstants(Unwrap(cmd), Unwrap(layout), pushRanges[i].stageFlags, pushRanges[i].offset, pushRanges[i].size, pushconsts+pushRanges[i].offset); - const vector &descSetLayouts = m_CreationInfo.m_PipelineLayout[pipeLayoutId].descSetLayouts; + const vector &descSetLayouts = m_CreationInfo->m_PipelineLayout[pipeLayoutId].descSetLayouts; // only iterate over the desc sets that this layout actually uses, not all that were bound for(size_t i=0; i < descSetLayouts.size(); i++) { - const DescSetLayout &descLayout = m_CreationInfo.m_DescSetLayout[ descSetLayouts[i] ]; + const DescSetLayout &descLayout = m_CreationInfo->m_DescSetLayout[ descSetLayouts[i] ]; if(i < graphics.descSets.size() && graphics.descSets[i] != ResourceId()) { @@ -176,20 +176,20 @@ void VulkanRenderState::BindPipeline(VkCommandBuffer cmd) { ObjDisp(cmd)->CmdBindPipeline(Unwrap(cmd), VK_PIPELINE_BIND_POINT_COMPUTE, Unwrap(GetResourceManager()->GetCurrentHandle(compute.pipeline))); - ResourceId pipeLayoutId = m_CreationInfo.m_Pipeline[compute.pipeline].layout; + ResourceId pipeLayoutId = m_CreationInfo->m_Pipeline[compute.pipeline].layout; VkPipelineLayout layout = GetResourceManager()->GetCurrentHandle(pipeLayoutId); - const vector &pushRanges = m_CreationInfo.m_PipelineLayout[pipeLayoutId].pushRanges; + const vector &pushRanges = m_CreationInfo->m_PipelineLayout[pipeLayoutId].pushRanges; // only set push constant ranges that the layout uses for(size_t i=0; i < pushRanges.size(); i++) ObjDisp(cmd)->CmdPushConstants(Unwrap(cmd), Unwrap(layout), pushRanges[i].stageFlags, pushRanges[i].offset, pushRanges[i].size, pushconsts+pushRanges[i].offset); - const vector &descSetLayouts = m_CreationInfo.m_PipelineLayout[pipeLayoutId].descSetLayouts; + const vector &descSetLayouts = m_CreationInfo->m_PipelineLayout[pipeLayoutId].descSetLayouts; for(size_t i=0; i < descSetLayouts.size(); i++) { - const DescSetLayout &descLayout = m_CreationInfo.m_DescSetLayout[ descSetLayouts[i] ]; + const DescSetLayout &descLayout = m_CreationInfo->m_DescSetLayout[ descSetLayouts[i] ]; if(compute.descSets[i] != ResourceId()) { diff --git a/renderdoc/driver/vulkan/vk_state.h b/renderdoc/driver/vulkan/vk_state.h index a4fe30508..e8bfe6d85 100644 --- a/renderdoc/driver/vulkan/vk_state.h +++ b/renderdoc/driver/vulkan/vk_state.h @@ -33,7 +33,7 @@ class VulkanResourceManager; struct VulkanRenderState { - VulkanRenderState(VulkanCreationInfo &createInfo); + VulkanRenderState(VulkanCreationInfo *createInfo); VulkanRenderState &operator =(const VulkanRenderState &o); void BeginRenderPassAndApplyState(VkCommandBuffer cmd); void BindPipeline(VkCommandBuffer cmd); @@ -80,7 +80,7 @@ struct VulkanRenderState VulkanResourceManager *GetResourceManager() { return m_ResourceManager; } VulkanResourceManager *m_ResourceManager; - VulkanCreationInfo &m_CreationInfo; + VulkanCreationInfo *m_CreationInfo; }; diff --git a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp index 6642dad9a..bc97f985c 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp @@ -855,6 +855,9 @@ static VkResourceRecord *GetObjRecord(VkDbgObjectType objType, uint64_t object) return GetRecord((VkSwapchainKHR)object); case VK_OBJECT_TYPE_COMMAND_POOL: return GetRecord((VkCommandPool)object); + case VK_OBJECT_TYPE_NUM: + case VK_OBJECT_TYPE_MAX_ENUM: + return NULL; } return NULL; } diff --git a/renderdoc/os/linux/linux_process.cpp b/renderdoc/os/linux/linux_process.cpp index 657b66b42..8b1ea097a 100644 --- a/renderdoc/os/linux/linux_process.cpp +++ b/renderdoc/os/linux/linux_process.cpp @@ -54,7 +54,7 @@ static map EnvStringToEnvMap(const char **envstring) string name; string value; - name.assign(e, equals); + name.assign(*e, equals); value = equals+1; ret[name] = value; @@ -257,7 +257,7 @@ uint32_t Process::LaunchAndInjectIntoProcess(const char *app, const char *workin } // turn environment string to a UTF-8 map - map env = EnvStringToEnvMap(environ); + map env = EnvStringToEnvMap((const char **)environ); vector &modifications = GetEnvModifications(); string libpath;