From 69df1348c09b95fd8fb602f2c7ea76807366dc12 Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 25 May 2018 14:37:37 +0100 Subject: [PATCH] Store the size of the push constant range in the vulkan pipeline state --- renderdoc/driver/vulkan/vk_replay.cpp | 5 ++--- renderdoc/driver/vulkan/vk_state.h | 2 ++ renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp | 2 ++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_replay.cpp b/renderdoc/driver/vulkan/vk_replay.cpp index 892633a13..98bd1296f 100644 --- a/renderdoc/driver/vulkan/vk_replay.cpp +++ b/renderdoc/driver/vulkan/vk_replay.cpp @@ -802,9 +802,8 @@ void VulkanReplay::SavePipelineState() m_VulkanPipelineState = VKPipe::State(); - m_VulkanPipelineState.pushconsts.resize(ARRAY_COUNT(state.pushconsts)); - memcpy(m_VulkanPipelineState.pushconsts.data(), state.pushconsts, - m_VulkanPipelineState.pushconsts.size()); + m_VulkanPipelineState.pushconsts.resize(state.pushConstSize); + memcpy(m_VulkanPipelineState.pushconsts.data(), state.pushconsts, state.pushConstSize); // General pipeline properties m_VulkanPipelineState.compute.pipelineResourceId = rm->GetOriginalID(state.compute.pipeline); diff --git a/renderdoc/driver/vulkan/vk_state.h b/renderdoc/driver/vulkan/vk_state.h index 4b24e506d..4005070b4 100644 --- a/renderdoc/driver/vulkan/vk_state.h +++ b/renderdoc/driver/vulkan/vk_state.h @@ -68,6 +68,8 @@ struct VulkanRenderState // this should be big enough for any implementation byte pushconsts[1024]; + // the actual number of bytes that have been uploaded + uint32_t pushConstSize = 0; ResourceId renderPass; uint32_t subpass; diff --git a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp index 06608d2a2..53db7e85a 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp @@ -1980,6 +1980,8 @@ bool WrappedVulkan::Serialise_vkCmdPushConstants(SerialiserType &ser, VkCommandB RDCASSERT(start + length < (uint32_t)ARRAY_COUNT(m_RenderState.pushconsts)); memcpy(m_RenderState.pushconsts + start, values, length); + + m_RenderState.pushConstSize = RDCMAX(m_RenderState.pushConstSize, start + length); } } }